System.out.println and System.err.println Printing Order Irregularity
When printing messages to the console using System.out.println() and System.err.println() within a loop, you might encounter the issue where the printed messages appear out of the expected order. Despite invoking the print methods alternately, the output displays a grouped order of one message type followed by the other, leading to confusion.
This phenomenon occurs because System.out and System.err represent distinct output streams. Each stream maintains its own buffer to cache the printed characters until it reaches a certain threshold or a flush operation is performed. The flush operation sends the buffered text to the actual console window.
In the provided code snippet:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
The loop repeatedly writes "out" to System.out and "err" to System.err. However, these streams flush their buffers independently. By default, the flush operation is triggered after a certain time or when the buffer reaches its threshold.
Since each stream has its own buffer, the characters accumulate separately. After the loop completes, the System.out buffer gets flushed, printing all the accumulated "out" messages, followed by the System.err buffer flushing and printing all the "err" messages. This results in the uneven output pattern.
To rectify this issue and ensure that the messages print in the order they're called, you can explicitly flush each buffer using:
System.out.flush(); System.err.flush();
By flushing the buffers, you force the buffered characters to be immediately displayed on the console, ensuring a consistent and logical printing order.
The above is the detailed content of Why Are System.out.println and System.err.println Outputs Sometimes Out of Order?. For more information, please follow other related articles on the PHP Chinese website!