在Javadoc中提供了关于这个问题的一个合理的讨论:
通常,Writer立即将其输出发送到基础字符或字节流。除非需要即时输出,否则建议将BufferedWriter包装在其write()操作可能会很昂贵的所有Writer周围,例如FileWriters和OutputStreamWriters。例如,
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));将缓冲PrintWriter的输出到文件。如果不进行缓冲,则每次调用print()方法都会导致将字符转换为字节,然后将这些字节立即写入文件中,这可能会非常低效。
如果您一次写大块的文本(例如整行),那么您可能不会注意到有什么不同。但是,如果您有很多代码一次附加一个字符,那么a的
BufferedWriter效率会更高。
编辑
根据以下安德鲁的评论,
FileWriter实际使用了自己的固定大小的1024字节缓冲区。通过查看源代码可以确认这一点。的
BufferedWriter
来源,在另一方面,示出其使用和8192字节的缓冲区大小(默认值),其可以通过用户的任何其它期望的大小来配置。因此,似乎
BufferedWritervs
的好处
FileWriter仅限于:
- 较大的默认缓冲区大小。
- 能够覆盖/自定义缓冲区大小。
为了进一步搅浑水,在Java 6的实现的
OutputStreamWriter实际委托给StreamEnprer,使用它自己的缓冲区8192个字节的默认大小。而且该
StreamEnprer缓冲区是用户可配置的,尽管没有办法通过封闭直接访问它
OutputStreamWriter。



