1. ホーム
  2. java

[解決済み】JavaでSystem.out.flush()を呼び出すタイミングと理由

2022-02-22 12:25:11

質問

なぜ特定のストリームをフラッシュする必要があるのでしょうか ( FileOutputStream とソケットからのストリーム)、標準出力ストリームはそうではないのですか?

誰かが使うたびに System.out PrintStream オブジェクトを呼び出しているときであろうと println() または write() そのため、ストリームをフラッシュすることはありません。 しかし、他のプログラマは習慣的に flush() a PrintStream / PrintWriter を他のストリームと組み合わせて使用することができます。

最近、何人かのプログラマーにこの質問をしたのですが、何人かは、Javaのバックグラウンドで System.out のストリームがありますが、それに関するドキュメントが見当たりません。

このようなことから、単純に System.out.println() はプラットフォームに依存しないので、システムによってはストリームのフラッシュが必要な場合があります。

どのように解決するのですか?

System.out を中心にしたものです。 PrintStream これは、デフォルトでは、改行が書き込まれるたびにフラッシュされます。

から ジャバドック :

autoFlush - boolean.もし true ならば,バイト配列が書き込まれるたびに,出力バッファがフラッシュされます. println メソッドが呼び出された場合、または改行文字やバイト( '\n' が書かれている

そのため println の場合、明示的に処理されます。 write のあるケースは byte[] も、"everly byte array is written"に該当するため、フラッシュが保証されます。

もし System.out を使って System.setOut で、オートフラッシングストリームを使用しない場合、他のストリームと同様にフラッシュする必要があります。

ライブラリコードでは、おそらく System.out を直接使用することはできませんが、もし使用するのであれば、フラッシュするように注意する必要があります。 System.out を使用して、フラッシュしないストリームを使用します。

にバイナリ出力を書き込むすべての Java プログラムは System.out に注意する必要があります。 flush 前に exit バイナリ出力には末尾の改行が含まれないことが多いからです。