標籤:byte tput 過程 logs 二進位 pac off 圖片 tst
Java IO詳解(一)------File 類我們知道,各個平台之間的路徑分隔字元是不一樣的。 ①、對於UNIX平台,絕對路徑名的首碼始終為"/" 。 相對路徑名沒有首碼。 表示根目錄的抽象路徑名具有首碼"/"和空名稱序列。 ②、對於Microsoft Windows平台,包含磁碟機說明符的路徑名的首碼由後面跟著":"的磁碟機代號組成,如果路徑名是絕對的,則可能後跟"\\" 。 UNC路徑名的首碼為"\\\\" ; 主機名稱和共用名稱是名稱序列中的前兩個名稱 沒有有指定磁碟機的相對路徑名沒有首碼。 那麼為了屏蔽各個平台之間的分隔字元差異,我們在構造 File 類的時候(如何構造,請看下面第二點),就可以使用上述 Java 為我們提供的欄位。
12 |
System.out.println(File.separator);//輸出 \ System.out.println(File.pathSeparator);//輸出 ; |
那麼我們可以看出: File.pathSeparator指的是分隔連續多個路徑字串的分隔字元 File.separator是用來分隔同一個路徑字串中的目錄的2、File 類的構造方法如何使用上述構造方法,請看如下例子:
12345678910111213141516171819202122 |
//不使用 Java 提供的分隔字元欄位,注意:這樣寫只能在 Windows 平台有效 File f1 = new File("D:\\IO\\a.txt"); //使用 Java 提供的分隔字元 File f2 = new File("D:"+File.separator+"IO"+File.separator+"a.txt"); System.out.println(f1);//輸出 D:\IO\a.txt System.out.println(f2);//輸出 D:\IO\a.txt //File(File parent, String child) //從父抽象路徑名和子路徑名字串建立新的 File執行個體。 File f3 = new File("D:"); File f4 = new File(f3,"IO"); System.out.println(f4); //D:\IO //File(String pathname) //通過將給定的路徑名字串轉換為抽象路徑名來建立新的 File執行個體。 File f5 = new File("D:"+File.separator+"IO"+File.separator+"a.txt"); System.out.println(f5); //D:\IO\a.txt //File(String parent, String child) //從父路徑名字串和子路徑名字串建立新的 File執行個體。 File f6 = new File("D:","IO\\a.txt"); System.out.println(f6); //D:\IO\a.txt |
Java IO詳解(二)------流的分類一、根據流向分為輸入資料流和輸出資料流二、根據傳輸資料單位分為位元組流和字元流三、根據功能分為節點流和封裝流 Java IO詳解(三)------位元組輸入輸出資料流 下面我們用 位元組輸出資料流 OutputStream 的典型實現 FileOutputStream 來介紹:
123456789101112131415161718 |
//1、建立目標對象,輸出資料流表示把資料儲存到哪個檔案。不寫盤符,預設該檔案是在該項目的根目錄下 File target = new File("io"+File.separator+"a.txt"); //2、建立檔案的位元組輸出資料流對象,第二個參數是 Boolean 類型,true 表示後面寫入的檔案追加到資料後面,false 表示覆蓋 OutputStream out = new FileOutputStream(target,true); //3、具體的 IO 操作(將資料寫入到檔案 a.txt 中) /** * void write(int b):把一個位元組寫入到檔案中 * void write(byte[] b):把數組b 中的所有位元組寫入到檔案中 * void write(byte[] b,int off,int len):把數組b 中的從 off 索引開始的 len 個位元組寫入到檔案中 */ out.write(65); //將 A 寫入到檔案中 out.write("Aa".getBytes()); //將 Aa 寫入到檔案中 out.write("ABCDEFG".getBytes(), 1, 5); //將 BCDEF 寫入到檔案中 //經過上面的操作,a.txt 檔案中資料為 AAaBCDEF //4、關閉流資源 out.close(); System.out.println(target.getAbsolutePath()); |
Java IO詳解(四)------序列化與還原序列化(物件流程) 1、什麼是序列化與還原序列化? 序列化:指把堆記憶體中的 Java 對象資料,通過某種方式把Object Storage Service到磁碟檔案中或者傳遞給其他網路節點(在網路上傳輸)。這個過程稱為序列化。通俗來說就是將資料結構或對象轉換成二進位串的過程 還原序列化:把磁碟檔案中的對象資料或者把網路節點上的對象資料,恢複成Java物件模型的過程。也就是將在序列化過程中所產生的二進位串轉換成資料結構或者對象的過程 2、為什麼要做序列化? ①、在分布式系統中,此時需要把對象在網路上傳輸,就得把對象資料轉換為二進位形式,需要共用的資料的 JavaBean 對象,都得做序列化。 ②、伺服器鈍化:如果伺服器發現某些對象好久沒活動了,那麼伺服器就會把這些記憶體中的對象持久化在本地磁碟檔案中(Java對象轉換為二進位檔案);如果伺服器發現某些對象需要活動時,先去記憶體中尋找,找不到再去磁碟檔案中還原序列化我們的對象資料,恢複成 Java 對象。這樣能節省伺服器記憶體。 3、Java 怎麼進行序列化? ①、需要做序列化的對象的類,必須實現序列化介面:Java.lang.Serializable 介面(這是一個標誌介面,沒有任何抽象方法),Java 中大多數類都實現了該介面,比如:String,Integer ②、底層會判斷,如果當前對象是 Serializable 的執行個體,才允許做序列化,Java對象 instanceof Serializable 來判斷。 ③、在 Java 中使用物件流程來完成序列化和還原序列化 ObjectOutputStream:通過 writeObject()方法做序列化操作 ObjectInputStream:通過 readObject() 方法做還原序列化操作 文章參考:http://www.cnblogs.com/ysocean/p/8005694.html
Java IO詳解