Java + Eclipse: Синхронизируйте stdout и stderr

Я использую Eclipse. Когда у меня есть приложение как это:

write 20 times 'Hello World\n' to stdout
write 'ERROR\n' to stderr
write 5 times 'Hello  World\n' to stdout

Вывод много раз походит на это:

Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
...
Hello World
Hello World
Hello World
ERROR

Существует ли способ синхронизировать эти два потока вывода? Конечно, не ожидая несколько миллисекунд после блока 20 раз Hello World и ожидание нескольких миллисекунд после печати ERROR.

10
задан Peter Ajtai 26 August 2010 в 00:50
поделиться

2 ответа

Для «серьезного» использования я предпочитаю не писать прямо на System.out / System.err , поскольку он жестко кодирует место назначения, а также использует довольно причудливый PrintStream (это поток байтов или поток символов?). Если вы заключите потоки вывода в свой собственный PrintWriter , вы можете затем настроить его на автоматическую очистку - второй аргумент в конструкторе - auto-flush .

Например.

PrintWriter out = new PrintWriter(System.out, true);
PrintWriter err = new PrintWriter(System.err, true);

out.println("Hello world");
//this will flush after writing the end of line

См.

6
ответ дан 3 December 2019 в 21:58
поделиться

System.out и System.err являются обычными объектами PrintStream (которые предоставляют метод flush()), поэтому попробуйте System.out.flush() и System.err.flush().

2
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: