Как использовать flush () для PrintWriter - PullRequest
12 голосов
/ 29 марта 2012

У меня есть несколько таких кодов:

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

Обязательно ли flush () в каждом операторе 'for'? Я слышал, что flush () будет автоматически вызываться при вызове close () . Если я напишу такой код:

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

и я бы больше не писал pw.flush () ? Спасибо.

Ответы [ 2 ]

21 голосов
/ 29 марта 2012

flush() - это , вероятно, не требуется в вашем примере.

Что он делает, так это гарантирует, что все, что записано в устройство записи до вызова flush(), записано в базовый поток, а не в какой-то внутренний буфер.

Метод пригодится в нескольких случаях:

  1. Если другому процессу (или потоку) необходимо проверить файл во время его записи, и важно, чтобы другой процесс увидел все последние записи.

  2. Если процесс записи может произойти сбой, и важно, чтобы никакие записи в файл не терялись.

  3. Если вы пишете на консоль, и вам необходимо убедиться, что каждое сообщение отображается сразу после его написания.

0 голосов
/ 29 марта 2012

Второй вариант лучше использовать, так как он создаст самозаполняемый объект PrintWriter.И если вы используете первый случай, тогда я не думаю, что flush () требуется в вашем примере.

...