如何为 PrintWriter 使用 flush()

Posted

技术标签:

【中文标题】如何为 PrintWriter 使用 flush()【英文标题】:How to use flush() for PrintWriter 【发布时间】:2012-04-13 05:05:41 【问题描述】:

我有一些这样的代码:

PrintWriter pw = new PrintWriter(new BufferedReader(....));
for(int i=0; i<10; i++) 
    pw.println("a");
    pw.flush();// flush each time when println()?

pw.close();

每个 'for' 语句中的 flush() 是否一定?我听说 flush() 会在调用 close() 时自动调用。 如果我这样写代码:

PrintWriter pw = new PrintWriter(new BufferedReader(....), true);

我不会再写 pw.flush() 了吗?谢谢。

【问题讨论】:

【参考方案1】:

flush() 在您的示例中可能不需要。

它的作用是确保在调用 flush() 之前写入写入器的任何内容都写入底层流,而不是位于某个内部缓冲区中。

该方法在几种情况下派上用场:

    如果另一个进程(或线程)在写入文件时需要检查文件,并且其他进程看到所有最近的写入很重要。

    如果写入过程可能会崩溃,重要的是不要丢失对文件的写入。

    如果您正在向控制台写入数据,并且需要确保每条消息在写入后立即显示。

【讨论】:

另一个与问题关系不大,但浏览量接近 5K 的问题标题【参考方案2】:

第二个选项更好用,因为它会创建一个可自动刷新的 PrintWriter 对象。如果您使用第一种情况,那么我认为您的示例情况不需要 flush()

【讨论】:

以上是关于如何为 PrintWriter 使用 flush()的主要内容,如果未能解决你的问题,请参考以下文章

如何为输出添加更多值?

打印流: PrintStream 和 PrintWriter

PrintWriter和BufferedWriter的区别

揭开Java IO流中的flush()的神秘面纱

打印流 & 数据流

在jsp里调用out.flush()和response.flushBuffer()有什么区别