System.out.println および System.err.println の印刷順序の不規則性
System.out.println を使用してコンソールにメッセージを出力する場合() と System.err.println() をループ内で実行すると、出力されるメッセージが予想外に表示されるという問題が発生する可能性があります。 注文。印刷メソッドを交互に呼び出しているにもかかわらず、出力には、あるメッセージ タイプの後に他のメッセージ タイプが続くというグループ化された順序が表示されるため、混乱が生じます。
この現象は、System.out と System.err が別個の出力ストリームを表すために発生します。各ストリームは、特定のしきい値に達するかフラッシュ操作が実行されるまで、印刷された文字をキャッシュするために独自のバッファーを維持します。フラッシュ操作では、バッファリングされたテキストが実際のコンソール ウィンドウに送信されます。
提供されたコード スニペットでは:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
ループは繰り返し "out" を System.out に書き込み、"err" を System.out に書き込みます。システムエラー。ただし、これらのストリームはバッファを個別にフラッシュします。デフォルトでは、フラッシュ操作は一定時間後、またはバッファーがしきい値に達したときにトリガーされます。
各ストリームには独自のバッファーがあるため、文字は個別に蓄積されます。ループが完了すると、System.out バッファがフラッシュされて、蓄積されたすべての「out」メッセージが出力され、続いて System.err バッファがフラッシュされてすべての「err」メッセージが出力されます。これにより、不均一な出力パターンが発生します。
この問題を修正し、メッセージが呼び出された順序で印刷されるようにするには、以下を使用して各バッファを明示的にフラッシュできます。
System.out.flush(); System.err.flush();
Byバッファをフラッシュすると、バッファされた文字がコンソールに即座に表示され、一貫性のある論理的な印刷順序が確保されます。
以上がSystem.out.println および System.err.println の出力が時々順序どおりにならないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。