天天看點

java io系列21之 InputStreamReader和OutputStreamWriter

InputStreamReader和OutputStreamWriter 是位元組流通向字元流的橋梁:它使用指定的 charset 讀寫位元組并将其解碼為字元。

InputStreamReader 的作用是将“位元組輸入流”轉換成“字元輸入流”。它繼承于Reader。

OutputStreamWriter 的作用是将“位元組輸出流”轉換成“字元輸出流”。它繼承于Writer。

1. InputStreamReader 源碼(基于jdk1.7.40)

java io系列21之 InputStreamReader和OutputStreamWriter
java io系列21之 InputStreamReader和OutputStreamWriter
java io系列21之 InputStreamReader和OutputStreamWriter

2. OutputStreamWriter 源碼(基于jdk1.7.40)

java io系列21之 InputStreamReader和OutputStreamWriter
java io系列21之 InputStreamReader和OutputStreamWriter
java io系列21之 InputStreamReader和OutputStreamWriter

說明:

OutputStreamWriter 作用和原理都比較簡單。

作用就是将“位元組輸出流”轉換成“字元輸出流”。它的原理是,我們建立“字元輸出流”對象時,會指定“位元組輸出流”以及“字元編碼”。

InputStreamReader和OutputStreamWriter的使用示例,參考源碼(StreamConverter.java):

java io系列21之 InputStreamReader和OutputStreamWriter
java io系列21之 InputStreamReader和OutputStreamWriter

運作結果:

c1=字

buf=流示例0123456

結果說明:

(01) testWrite() 的作用是将“内容寫入到輸出流”。寫入的時候,會将寫入的内容轉換utf-8編碼并寫入。

(02) testRead() 的作用是将“内容讀取到輸入流”。讀取的時候,會将内容轉換成utf-8的内容轉換成位元組并讀出來。

生成的檔案utf-8的file.txt的16進制效果圖如下:

java io系列21之 InputStreamReader和OutputStreamWriter

将StreamConverter.java中的CharsetName修改為"gb2312"。運作程式,生産的file.txt的16進制效果圖如下:

java io系列21之 InputStreamReader和OutputStreamWriter