如何为PrintWriter使用flush()

jan*_*key 13 java java-io

我有一些像这样的代码:

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();
Run Code Online (Sandbox Code Playgroud)

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

PrintWriter pw = new PrintWriter(new BufferedReader(....), true);
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 22

flush()可能不是在你的榜样必需的.

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

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

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

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

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