ホームページ > Java > &#&チュートリアル > System.out.println() と System.err.println() が予期した順序で出力されないのはなぜですか?

System.out.println() と System.err.println() が予期した順序で出力されないのはなぜですか?

Linda Hamilton
リリース: 2024-12-15 07:25:11
オリジナル
218 人が閲覧しました

Why Doesn't System.out.println() and System.err.println() Output in the Expected Order?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート