System.out.print
で使用されるバッファがいっぱいになると、出力はファイル(またはターミナルまたはプログラムの標準出力ストリームに接続されている他のデータターゲット)に書き込まれ、結果として空のバッファになります。バッファサイズを気にせずに出力を書き込むことは、通常の使用法です。 flush
を呼び出さないように、プログラムをクラッシュまたはブロックしたり、データを失うことはありません。
プログラムの外部でデータをすぐに利用できるようにする必要がある場合は、flush
に明示的に電話する必要があります。たとえば、プログラムが別のプログラムとデータを交換していて、そのプログラムに要求を送信してそのプログラムの応答を待つ場合は、要求を送信した後にもう1つのプログラムが受信することを確認してからに電話する必要がありますそれ。同様に、あなたのプログラム(またはそれが走るマシン)がクラッシュした場合、最後にflush
を呼び出した時までの出力だけが書き出されていることが保証されます。
ストリームが自動的にフラッシュされるように設定されている場合は、改行文字を(明示的にまたはprintln
を通して)書き込むことは、flush
と同じくらい効果的です。 close
を呼び出すと、flush
も呼び出されます(そのため、close
はIOException
をスローする可能性があります。ストリームがフルディスク上のファイルに接続されているなど)、データを書き出して再生できない可能性があります。
System.out
に接続されているストリームがすぐにデータを受信する準備ができていない場合、バッファをフラッシュするとプログラムがブロックされることがあります(たとえば、データがすぐに入力を読み取らない別のプログラムにパイプされている)。バッファはいつでも(バッファがいっぱいになるため)フラッシュできるため、空でない引数を持つprint
の呼び出しはブロックされる可能性があります。
詳細については、buffered streams tutorialおよびjava.io.PrintStream
classのマニュアルを参照してください。
'System.out'を例外をスローするカスタムストリームに置き換えるために' System.setOut() 'を使用してください。 – paislee
両方とも間違っています。 '\ n'はそれとは関係がありません。' .close() 'や' .flush() 'を呼び出すと、ストリームの内容が書き出されたり、失われたりすることがあります。 –