1. 二進(jìn)制IO操作
主要通過InputStream和OutputStream類及其子類進(jìn)行。方法和文本操作類似。
FileInputStream和FileOutputStream用于操作文件。
BufferedInputStream和BufferOutputStream和文本操作類似,只是默認(rèn)的緩沖區(qū)大小為512字節(jié)。
DataInputStream和DataOutputStream用于包裝InputStream和OutputStream,直接進(jìn)行字符、實數(shù)、整數(shù)、布爾值等的讀寫。
DataOutputStream中writeChar方法寫入Unicode編碼,如果要寫入ASCII嗎,使用writeByte。
2. UTF編碼
UTF編碼存儲字符使用的字節(jié)數(shù)不固定,小于0x7F的ASCII碼用一個字節(jié)表示,小于0x7FF的Unicode編碼用兩個字節(jié)表示,其余的Unicode編碼用三個字節(jié)表示。
UTF編碼的開頭幾位表示該字符使用的字節(jié)數(shù)。如果第一位是0,則是單字節(jié)字符;如果前三位是110,則是雙字節(jié)字符;如果前四位是1110,則是三字節(jié)字符。
字符串的長度則保存在UTF串的頭兩個字節(jié)。
DataInputStream和DataOutputStream分別有readUTF()和writeUTF()方法操作UTF編碼。
3. 當(dāng)一個Unicode碼無法被轉(zhuǎn)換為ASCII碼時,產(chǎn)生的是”?”字符。
4. 對象IO操作
ObjectInputStream類和ObjectOutputStream類,使用readObject/writeObject方法進(jìn)行讀寫。注意需要轉(zhuǎn)型。
5. Serializeable接口
可寫入對象流的對象稱為可串化的,可串化對象都繼承了java.io.Serializable接口,這是一個記號接口。
當(dāng)一個對象被儲存時,對象的類名、類的簽名、實例變量的值都被儲存,但是靜態(tài)變量不會被儲存。
如果對象中含有不能被串化的實例數(shù)據(jù)域,必須將該數(shù)據(jù)域聲明為transient才能使得自身可串化。
一個對象第一次被儲存時,對象的完整內(nèi)容及序列號都會被保存,之后再存儲該對象,僅僅寫入序列號。
6. 隨機(jī)文件訪問
RandomAccessFile類同時繼承了DataInput和DataOutput接口。
構(gòu)造器中可以帶mode參數(shù),”rw”表示可讀寫,”r”表示只讀。
讀寫操作都在一個稱為文件指針指示的位置進(jìn)行。
length()方法返回文件的長度。
sekk()方法在文件中跳躍。