A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

言归正传,一直有个疑惑,字符流FileWriter肯定是有缓冲区的,为什么在字符流体系中还有 BufferedWriter,BufferedReader这样的缓冲类。
说FileWriter有缓冲区相信大家都同意,因为用它的方法write('a')写数据时,如果不调用flush()或者close(),那么数据是不会写到目的地中的。
那如果它已经有缓冲了,BufferedReader又是个什么作用呢?先跳过这个问题,看一下io输出流体系:
Writer                                                    OutputStream
    |--OutputStreamWriter                                 |--FileOutputStream
    |                |--FileWriter                                 |--FilterOutputStream
    |--BufferedWriter                                                        |--BufferedOutputStream
先看字节流的情况。如果用FileOutputStream类的write()方法写入字节,数据会直接写入目的地而不需要调用flush()或者close(),这个视频上有。当用
BufferedOutputStream包装后,再调用write()方法,如果缓冲区未满并且没有调用flush或者close方法,数据不会写到目的地。正如API所解释的,数据
写入了底层的输出流中而不是最终目的地,这样减少了调用系统写入,不再针对每个字节系统写入。相对而言,字节流的缓冲更好理解。
我们都知道,字符流的底层依然是字节流,只不过在每次的读写操作前增加了编码解码的工作。所以我猜测,BufferedWriter的作用是对字符先累积缓冲,
达到一定数量后进行解码,避免频繁的解码。并且在Writer的底层实现中那个字节流应该是 BufferedOutputStream。

以上全凭猜测,没有查看源码,希望同学们能帮忙解析下。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马