天天看点

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