8

我想知道 FileWriter 是否被缓冲。

这个SO 问题中,似乎是这样,但是在这个SO 问题中似乎不是。(这将是每次调用 write(..) 时的系统调用。

所以基本上阅读这两个问答我有点困惑。有人能清楚地解释清楚吗?

提前致谢。

编辑:通过阅读我引用相关部分的 API解决了问题:

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

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

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

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

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

4

2 回答 2

0

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

于 2013-07-27T15:56:13.270 回答
-1

FileWriter没有缓冲,您必须使用 aBufferedWriter作为包装器:

final int myBufferSize = 2048;

Writer myWriter = new BufferedWriter(new FileWriter, myBufferSize);
于 2013-07-27T15:48:40.737 回答