溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解Java 字節(jié)流與字符流

發(fā)布時(shí)間:2021-11-20 15:38:41 來(lái)源:億速云 閱讀:93 作者:柒染 欄目:云計(jì)算

如何理解Java 字節(jié)流與字符流,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

下面我們開(kāi)始今天的內(nèi)容。

字節(jié)流和字符流其實(shí)很好理解!

字節(jié)流就是 Byte 流,字節(jié)就是 Byte。

字符流就是 Character 流,字符就是 Character。

這里面有兩個(gè)單位換算大家需要記住一下。

  • 1 byte = 8 bit

  • 1 char = 2 byte = 16 bit

雖然 1 bit 才是數(shù)據(jù)真正的最小單位,但 1 bit 的信息量太少了。要表示一個(gè)有用的信息,需要好幾個(gè) bit 一起表示。所以大多數(shù)情況下,字節(jié)是數(shù)據(jù)最小的基本單位。

比如,我們熟知的基本型的大小都是 8 bit(也就是1字節(jié))的整數(shù)倍:

  • boolean: 1 byte

  • short: 2 byte

  • int: 4 byte

  • float: 4 byte

  • long: 8 byte

  • double: 8 byte

到這里,我們認(rèn)識(shí)的都是字節(jié)。但是,Java I/O 的編碼系統(tǒng)提供的 Java IO 庫(kù)有兩個(gè)支系,面向字節(jié)流的 InputStream 和 OutputStream;面向字符的 Reader 和 Writer。

為什么要有字符流呢?那是因?yàn)橛⑽?,我們可以用字?jié)來(lái)表示,但是中文、日文、韓文等沒(méi)法用字節(jié)來(lái)表示了,所有人們就想到了新的字符編碼集。比如,Unicode 字符集,GB 18030,GBK,Big5,ISO-8859-1 等。

所以,最終就是一個(gè)字符用 1 個(gè)、2 個(gè)或 4 個(gè)字節(jié)組成。總而言之,一切都是字節(jié)流,其實(shí)沒(méi)有字符流這個(gè)東西。字符只是根據(jù)編碼集對(duì)字節(jié)流翻譯之后的產(chǎn)物。

所以,字節(jié)流的 InputStream 和 OutputStream 才是一切的基礎(chǔ)。實(shí)際總線中流動(dòng)的只有字節(jié)流。需要對(duì)字節(jié)流做特殊解碼才能得到字符流。Java 中負(fù)責(zé)從字節(jié)流向字符流解碼的橋梁是InputStreamReader 和 InputStreamWriter。

看下面的 InputStreamReader 和 OutputStreamWriter 的結(jié)構(gòu)圖。

如何理解Java 字節(jié)流與字符流

實(shí)際負(fù)責(zé)編碼和解碼的是 StreamDecoder 類和 StreamEncoder 類。編碼過(guò)程中必須指定使用的字符編碼集 Charset。所以 InputStreamReader 和 OutputStreamWriter 的構(gòu)造器都帶有 Charset 類型的參數(shù)。

如果沒(méi)有指定編碼集,將使用系統(tǒng)默認(rèn)編碼集。而我們經(jīng)常使用的 FileInputReader 和 FileOutputWriter 就是 InputStreamReader 和 OutputStreamWriter 的派生類。

計(jì)算機(jī)中本沒(méi)有字符流,一開(kāi)始只適用于英文,但是互聯(lián)網(wǎng)屬于全人類的,所以人們又搞出了字符流。字符只是包裝的字節(jié)而已。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI