2013-07-27 71 views
6

我想知道是否缓冲FileWriter。FileWriter vs BufferedWriter

this SO问题,它似乎是,但在this SO质疑似乎并非如此。(这将是一个系统调用,每次写(..)被调用。

所以基本上看完那两个Q & AI有点茫然是任何人能解释清楚提前出局

感谢

编辑:?问题通过阅读this API由本人引述解决相关部分:

每次调用write()方法都会导致编码转换器在给定字符上调用 。在写入底层输出 数据流之前,结果字节是 在缓冲区中累积的。可以指定此缓冲区的大小,但默认情况下,它的大小足以满足大多数用途。请注意,传递给 write()方法的字符不会被缓冲。

为了获得最高效率,请考虑在BufferedWriter中封装OutputStreamWriter以避免频繁的转换器调用。例如: 示例:

Writer out = new BufferedWriter(new OutputStreamWriter(System.out));

由于FileWriter扩展了OutputStreamWriter,它也适用于它。

感谢您的时间,但我知道我问了一些非常具体的问题。

回答

0

FileWriter没有缓冲,你必须使用一个BufferedWriter作为包装:

final int myBufferSize = 2048; 

Writer myWriter = new BufferedWriter(new FileWriter, myBufferSize); 
+0

默认的缓冲区大小呢? – Rollerball

0

我会recomand始终使用的BufferedWriter。它允许您控制实际的缓冲区大小,并且可以保证无论您使用的是何种JVM,IO都将被缓冲,从而带来巨大的IO性能提升。

+0

好的,但FileWriter的缓冲区是什么?它只有这个着名的标准字节缓冲区?它是如何工作的?是处理它的JVM? – Rollerball

+0

JDK 1.7代码的外观在Writer Baseclass中显示了一个writeBuffer。所以所有的作家都有这个缓冲区。 BufferedWriter使用第二个缓冲区private char cb [];这导致了这样一个结论:这个隐藏的缓冲区可能不是所有JDK实现中的一部分(android怎么样?) – morpheus05

+1

否。在OutputStreamWriter中重写了写入方法。 OutputStreamWriter使用StreamEncoder进行缓冲,后者将字符编码为字节。 –