這是dataOutputStream 的方法~~使用utf-8編碼 其實就是從unicode變過來的,utf8編碼把其中的ASC編碼變成1個位元組,其他其他字元2到3個位元組!因為dataInput(output)Stream 屬於位元組流,所以用這個編碼可以把其他形式的轉化過來
- writeUTF(String str);
- write(int b) ;
- writeBytes(String s) ;
- 這幾個方法可以傳的參數不一樣。
- writeUTF和writeBytes都可以傳String類型的參數,而write就不行了。
-
- public final void writeUTF(String str)
- throws IOException以與機器無關方式使用 UTF-8 修改版編碼將一個字串寫入基礎輸出資料流。
- 首先,通過 writeShort 方法將兩個位元組寫入輸出資料流,表示後跟的位元組數。該值是實際寫出的位元組數,不是字串的長度。根據此長度,使用字元的 UTF-8 修改版編碼按順序輸出字串的每個字元。如果沒有拋出異常,則計數器 written 增加寫入輸出資料流的位元組總數。該值至少是 2 加 str 的長度,最多是 2 加 str 的三倍長度。
-
- String readUTF()
- throws IOException讀入一個已使用 UTF-8 修改版格式編碼的字串。readUTF 的常規協定是:該方法讀取使用 UTF-8 修改版格式編碼的 Unicode 字串的表示形式;然後以 String 的形式返回此字串。
- 首先讀取兩個位元組,並使用它們構造一個無符號 16 位整數,構造方式與 readUnsignedShort 方法的方式完全相同。該整數值被稱為 UTF 長度,它指定要讀取的額外位元組數。然後成組地將這些位元組轉換為字元。每組的長度根據該組第一個位元組的值計算。緊跟在某個組後面的位元組(如果有)是下一組的第一個位元組。
-
- 如果組的第一個位元組與位元模式 0xxxxxxx(其中 x 表示“可能為 0 或 1”)匹配,則該組只有這一個位元組。該位元組被左側補零,轉換成一個字元。
-
- 如果組的第一個位元組與位元模式 110xxxxx 匹配,則該組只由位元組 a 和另一個位元組 b 組成。如果沒有位元組 b(因為位元組 a 是要讀取的最後一個位元組),或者位元組 b 與位元模式 10xxxxxx 不匹配,則拋出 UTFDataFormatException。否則,將該群組轉換成字元:
-
-
- (char)(((a& 0x1F) << 6) | (b & 0x3F))
- 如果組的第一個位元組與位元模式 1110xxxx 匹配,則該組由位元組 a 和另外兩個位元組 b 和 c 組成。如果沒有位元組 c(因為位元組 a 是要讀取的最後兩個位元組之一),或者位元組 b 或位元組 c 與位元模式 10xxxxxx 不匹配,則拋出 UTFDataFormatException。否則,將該群組轉換成字元:
-
-
- (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
- 如果組的第一個位元組與模式 1111xxxx 或模式 10xxxxxx 匹配,則拋出 UTFDataFormatException。
- 如果在執行整個過程中的任意時間到達檔案末尾,則拋出 EOFException。
-
- 在通過此過程將每個群組轉換成字元後,按照從輸入資料流中讀取相應組的順序,將這些字元收集在一起,形成一個 String,然後該字串將被返回。
-
- 可以使用 DataOutput 介面的 writeUTF 方法寫入適合此方法讀取的資料。