言归正传,一直有个疑惑,字符流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。
以上全凭猜测,没有查看源码,希望同学们能帮忙解析下。
|