InputStreamReader 是字节流通向字符流的桥梁,OutputStreamWriter 是字符流通向字节流的桥梁。
举个例子分析这两句话.
new BufferedReader(new InputStreamReader(System.in));
new BufferedWriter(new OutputStreamWriter(System.out));
首先要知道输入流的终点是内存,而输出流的起点是内存。
InputStream(System.in)-->InputStreamReader-->BufferedReader-->内存中(字符流)
其中inputStreamReader是将字节流转化为字符流.
内存中(字符流)-->BufferedWriter-->OutputStreamWriter-->OutputStream(System.out)
调用bufferWriter的write方法,从内存中读取刚才读进来的字符流,bufferWriter的write会调用OutputStreamWriter的write方法,而outputStreamWriter的write方法会调用outputStream的write方法,最终以字节流的形式输出.
从键盘获得字节输入流转化成了字符,输出时就是从内存中的字符流到字节流了.
题目的要求将文件数据按照utf-8编码表写入的指定文件中时,必须使用OutputStreamWriter转换流.
如果用默认的编码表操作纯文本数据时,以字节流或字符流形式存入的结果没有区别.
字节流读取的时候,读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节时,先去查指定的编码表,将查到的字符返回.
字符流其实就是基于字节流读取字节时,去查找了指定的编码. |