【问题标题】:How to use flush() for PrintWriter如何为 PrintWriter 使用 flush()
【发布时间】: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() 了吗?谢谢。

【问题讨论】:

    标签: java java-io


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2021-10-21
      相关资源
      最近更新 更多