java - BufferedWriter自动刷新

标签 java flush filewriter bufferedwriter

我想知道我应该写入多长时间才能超出缓冲区,从而自动刷新缓冲区。

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/

相关文章:

java - 是否可以在 Class.forName 中使用动态值?

java - 如何无条件停止线程

haskell - 如何防止输入被冲入输出?

java - ServletResponse#flushBuffer() 包括什么?

http - 在 Golang 中没有缓冲 http.ResponseWritter

java - 使用 try-catch block 、文件编写器和打印编写器在 java 中创建自定义类

java - 创建字典以在 Android 中使用

java - 如何编写 JUnit 测试(用于文件写入)?

java - 将多行放入一个文本文件中? - java

java - "overridden method does not throw Exception"?