flush() の正確な使用法は何ですか? ストリームとバッファの違いは何ですか? なぜバッファが必要なのですか?
3 に答える
バッファリングの利点は効率です。一般に、4096 バイトのブロックをファイルに 1 回書き込む方が、たとえば 1 バイトを 4096 回書き込むよりも高速です。
バッファリングの欠点は、フィードバックを見逃すことです。ハンドルへの出力は、ファイル ハンドルへの書き込みに値する十分なバイト数が書き込まれるまで、メモリ内に残すことができます。プログラムの一部がデータをファイルに書き込むことがありますが、プログラムの最初の部分がメモリからディスクにデータをコピーするまで、プログラムの別の部分または別のプログラムはそのデータにアクセスできません。データがそのファイルに書き込まれる速さによっては、これには任意の時間がかかる場合があります。
を呼び出すとflush()
、バッファがいっぱいでなくても、バッファ内のデータをすぐにファイル ハンドルに書き出すように OS に要求します。
データは、実際にディスク (バッファー内) に書き込まれる前にキャッシュされることがあり、フラッシュによってバッファー内の内容がディスクに書き込まれます。
flush
すべてのデータを基になるストリームに送信するよう出力ストリームに指示します。内部バッファリングのために必要です。バッファーの本質的な目的は、基になるストリームの API への呼び出しを最小限に抑えることです。長いバイト配列を に格納する場合、FileOutputStream
Java がオペレーティング システムのファイル API をバイトごとに 1 回呼び出すことは望ましくありません。このように、バッファは Java の内外のさまざまな段階で使用されます。バイトごとに 1 回呼び出したとしてもfputc
、OS は独自のバッファリングを持っているため、実際には毎回ディスクに書き込むことはありません。