如何将 flush() 用于 PrintWriter

2022-09-03 13:22:55

我有一些这样的代码:

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()

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

  1. 如果另一个进程(或线程)在写入文件时需要检查该文件,并且另一个进程必须看到所有最近的写入操作。

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

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


答案 2

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


推荐