PrintWriter в Java дает неожиданное поведение - PullRequest
2 голосов
/ 05 октября 2011
import java.io.*;
class demo
{
public static void main(String args[])
{
    PrintWriter pw=new PrintWriter(System.out);
    pw.println("java");
    //pw.print("java");
}
}

// вывод java с использованием pw.println, но вывод нулевой с использованием pw.print, т. Е. При использовании print.

на консоль ничего не выводится.

Ответы [ 4 ]

6 голосов
/ 05 октября 2011

Попробуйте вместо этого:

PrintWriter pw=new PrintWriter(System.out);
pw.print("java");
pw.flush();

PrintWriter будет выполнять внутреннюю буферизацию, а метод println автоматически очищает его.

6 голосов
/ 05 октября 2011

Это почти наверняка просто буферизация - и если вы не очищаете ее, вы никогда не получите выход.Начиная с документа :

В отличие от класса PrintStream, если включена автоматическая очистка, то это будет выполняться только при вызове одного из методов println, printf или format, а невсякий раз, когда символ новой строки случается выводить.В этих методах используется собственное представление платформы о разделителе строк, а не символ новой строки.

Попробуйте:

pw.flush();

в конце кода.

1 голос
/ 05 октября 2011

Для автоматической промывки вы можете использовать этот конструктор

PrintWriter(OutputStream out, boolean autoFlush);
0 голосов
/ 05 октября 2011

Вызов println() неявно очищает буфер вывода, тогда как вызов print() - нет.Попробуйте использовать print(), а затем вызовите pw.flush().

Также обратите внимание, что есть конструкторы PrintWriter, которые включают опцию автоматической очистки после любого вызова записи.

...