ホームページ >Java >&#&チュートリアル >System.out.println() と System.err.println() が予期した順序で出力されないのはなぜですか?
System.out.println と System.err.println の出力の予期しない順序
System.out.println() と System.err.println の出力に関する観察System.err.println() 呼び出しが実行した順序でコンソールに出力されないのはよくあることです。
Java では、System.out と System.err は、コンソールに出力を書き込むために使用される 2 つの異なるストリームです。 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() を呼び出すたびにバッファーを直ちにフラッシュするように強制できます。これは、対応するストリームで flash() メソッドを使用して実行できます。
flush() 呼び出しを追加すると、各ストリームからの出力がすぐにコンソールに送信されるようになります。正しい順序で表示してください。
以上がSystem.out.println() と System.err.println() が予期した順序で出力されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。