InputStreamReader和OutputStreamWriter提供了将字节流转换成字符流的方法,并且可以指定编码格式
直接上例子:
假如有一个文本文件,里面是存放的是utf-8的“你好,world”
用InputStreamReader(InputStream,编码格式),就可以传入一个字节流对象和编码格式(不传入编码格式的话就是IDEA设置的编码格式,默认是系统的默认格式),调用read方法的时候实际干活的是传入的字节流对象,但是它会将读取到的一个或多个字节返回(utf--8中文占3个字节,英文1个字节),read返回的就是按照传入的编码格式解析得到的一个int型数字,将该数字强制转换为char就会得到对应的字符,循环read,当读取到文件末尾时,就会返回-1,这样,就可以把“你好,world”完整的得到
如果是用InputStream的read方法,一次就只能读取一个字节,如果是英文,倒没什么影响,因为英文只占1个字节,但是如果是中文的话,占3个字节,read方法并不会将这3个字节合起来解析为一个中文,而是将他们分开解析,那就会造成乱码
OutputStreamWriter也是一样的道理,传入的是一个OutputStream的对象,也可以指定编码格式,
使用writer方法时,可以按照指定的编码写入一个字符串,实际干活的还是传入的OutputStream字节流对象
有人可能会问:OutputStreamWriter和FileWriter在功能上有什么区别?
区别不大,FileWriter是OutputStreamWriter的父类,区别在于OutputStreamWriter可以指定写入字符的编码格式,还有一些其他的区别