Я использую 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
.
Для «серьезного» использования я предпочитаю не писать прямо на 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
См.
System.out и System.err являются обычными объектами PrintStream
(которые предоставляют метод flush()), поэтому попробуйте System.out.flush()
и System.err.flush()
.