我想知道我应该写入多长时间才能超出缓冲区,从而自动刷新缓冲区。
try
{
BufferedWriter br = new BufferedWriter(new FileWriter(file),1);
br.write("How much should I write in order to get it flushed without using .flush() nor close());
我知道 close() 会自动刷新缓冲区,但我也知道一旦缓冲区已满并且它接收到更多输入,它就会刷新它,然后获得更多输入。
那么我应该写多少才能克服我在构造函数中指定的 1
大小?
我已经输入了很多但是没有结果。
PS:这只是为了了解缓冲区在幕后是如何工作的。
提前致谢。
最佳答案
如果查看 BufferedWriter
的任何 write
方法的 Java 源代码,您将看到 flushBuffer
方法调用,其中,依次调用 out.write(...)
。它不会调用 out.flush()
。
用更容易理解的术语来说,这意味着什么:
是的,它会在每个字符后刷新,但会将其刷新到底层的 Writer(本例中为 FileWriter
),而不是实际的文件(与flush
,它调用 flushBuffer
以及 out.flush()
,将底层的 Writer
刷新到实际文件)。 FileWriter
有自己的刷新发生时间安排(我不完全确定,但我认为缓冲区大小是 StreamEncoder
中定义的默认值,即 8192
)。
关于java - BufferedWriter自动刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17926136/