共計 1180 個字符,預計需要花費 3 分鐘才能閱讀完成。
如何理解 Java 字節流與字符流,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
下面我們開始今天的內容。
字節流和字符流其實很好理解!
字節流就是 Byte 流,字節就是 Byte。
字符流就是 Character 流,字符就是 Character。
這里面有兩個單位換算大家需要記住一下。
1 byte = 8 bit
1 char = 2 byte = 16 bit
雖然 1 bit 才是數據真正的最小單位,但 1 bit 的信息量太少了。要表示一個有用的信息,需要好幾個 bit 一起表示。所以大多數情況下,字節是數據最小的基本單位。
比如,我們熟知的基本型的大小都是 8 bit(也就是 1 字節)的整數倍:
boolean: 1 byte
short: 2 byte
int: 4 byte
float: 4 byte
long: 8 byte
double: 8 byte
到這里,我們認識的都是字節。但是,Java I/O 的編碼系統提供的 Java IO 庫有兩個支系,面向字節流的 InputStream 和 OutputStream;面向字符的 Reader 和 Writer。
為什么要有字符流呢?那是因為英文,我們可以用字節來表示,但是中文、日文、韓文等沒法用字節來表示了,所有人們就想到了新的字符編碼集。比如,Unicode 字符集,GB 18030,GBK,Big5,ISO-8859-1 等。
所以,最終就是一個字符用 1 個、2 個或 4 個字節組成。總而言之,一切都是字節流,其實沒有字符流這個東西。字符只是根據編碼集對字節流翻譯之后的產物。
所以,字節流的 InputStream 和 OutputStream 才是一切的基礎。實際總線中流動的只有字節流。需要對字節流做特殊解碼才能得到字符流。Java 中負責從字節流向字符流解碼的橋梁是 InputStreamReader 和 InputStreamWriter。
看下面的 InputStreamReader 和 OutputStreamWriter 的結構圖。
實際負責編碼和解碼的是 StreamDecoder 類和 StreamEncoder 類。編碼過程中必須指定使用的字符編碼集 Charset。所以 InputStreamReader 和 OutputStreamWriter 的構造器都帶有 Charset 類型的參數。
如果沒有指定編碼集,將使用系統默認編碼集。而我們經常使用的 FileInputReader 和 FileOutputWriter 就是 InputStreamReader 和 OutputStreamWriter 的派生類。
計算機中本沒有字符流,一開始只適用于英文,但是互聯網屬于全人類的,所以人們又搞出了字符流。字符只是包裝的字節而已。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。