System.out.println 和System.err.println 輸出的意外順序
您對System.out.println() 和System .err.println()呼叫不會按照您的順序列印到控制台,這是一種常見的情況
在Java 中,System.out 和System.err 是兩個不同的流,用於將輸出寫入控制台。 System.out 用於標準輸出,而 System.err 用於錯誤訊息。預設情況下,這些流的刷新方式不同。
當您呼叫 System.out.println() 時,輸出將會加入到標準輸出緩衝區。但是,當您呼叫 System.err.println() 時,輸出將會新增至標準輸出緩衝區和錯誤輸出緩衝區。這是因為 System.err 旨在顯示錯誤訊息,即使標準輸出被重定向,也應該始終顯示錯誤訊息。
這些緩衝區的內容在不同時間刷新。每當遇到換行符時都會刷新標準輸出緩衝區,而當發生錯誤或程式退出時會刷新錯誤輸出緩衝區。
因此,如果您交替呼叫 System.out.println () 和 System.err.println() 在一個循環內,輸出將不會按您期望的順序出現。相反,所有 System.out.println() 呼叫將刷新在一起,然後是所有 System.err.println() 呼叫。
解決方案
到修復此問題,您可以在每次調用System.out.println() 和System.err.println() 後立即強制刷新緩衝區。這可以使用對應流上的flush()方法來完成。
for (int i = 0; i < 5; i++) { System.out.println("out"); System.out.flush(); // Flush the standard output buffer System.err.println("err"); System.err.flush(); // Flush the error output buffer }
透過新增flush()調用,您可以確保每個串流的輸出立即傳送到控制台,因此它將以正確的順序出現。
以上是為什麼 System.out.println() 和 System.err.println() 不如預期順序輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!