字符流和字节流

Writer/Reader的本质就是InputStreamReader或者OutputStreamWriter
其实就是包装了一层,更方便使用,有的多一些比如readLine这种功能。

字节流就是按字节来读取数据。
字符流的意思是说:按【字符】来读取字节流。

BufferedReader reader = 
new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"), Charset.forName("utf-8")));

这里只是构建了一个BufferedReader对象,还没开始读取。这个对象会以utf-8的编码字符集来读取字节转化为字符。

这个的好处如上诉,仅仅因为提供了更多对字符串的处理。

同时,可以不指定编码,但是程序会自动获取所在系统的字符编码来操作。这里和字节流是一样的。

PS:Filewriter读取文件采取的是平台默认编码(视操作系统而定)。当要写入的文本文件编码和平台默认编码不一致时,就会出现中文乱码的情况。
Filewriter的方法只有构造函数,参数都是路径或者file。用法应该就是调用父类puputstreamWriter的方法(实现来Writer的方法)

同时flush是刷新,但是buffer是可以配置缓冲区大小。

任何输出流都是有缓冲区的,Bufferedxxx这种输出流提供可配置缓冲区大小,其他输出流都是有默认大小的缓冲区的,FileWriter的flush()方法是从OutputStreamWriter中继承来的,其作用就是清空缓冲区并完成文件写入操作的。

推荐阅读更多精彩内容