私が見ているサイトは言う
「BufferWriterクラスは、テキストを文字出力ストリームに書き込み、文字をバッファリングして、単一の文字、配列、および文字列を効率的に書き込むために使用されます。」
より効率的な理由とその理由は何ですか?
私が見ているサイトは言う
「BufferWriterクラスは、テキストを文字出力ストリームに書き込み、文字をバッファリングして、単一の文字、配列、および文字列を効率的に書き込むために使用されます。」
より効率的な理由とその理由は何ですか?
BufferedWriter
文字ごとに書き込むのではなく、バッファを使用するため、より効率的です。I/O
そのため、ディスクの操作が減ります。データはバッファに収集され、バッファがいっぱいになるとファイルに書き込まれます。これが、flushメソッドを呼び出さなかった場合にファイルにデータが書き込まれないことがある理由です。つまり、データはバッファに収集されますが、プログラムはファイルに書き込む前に終了します。フラッシュメソッドを呼び出すと、バッファが完全にいっぱいになっていない場合でも、データがファイルに書き込まれます。
ファイルに 1 文字ずつ書き込むと、書き込みコストが高くなります。そのコストを削減するために、バッファーが提供されます。バッファに書き込んでいる場合は、ある程度の制限を待ってから、全体をディスクに書き込みます。
BufferedWriterは、バッファー(8192バイト)がいっぱいになるまで待機し、1回のディスク操作でバッファー全体を書き込みます。単一の書き込みごとにバッファリングを解除すると、ディスクI / Oが発生し、明らかにコストが高くなります。
名前が示すように、BufferedWriterは書き込みのコストを削減するためにバッファーを使用します。ファイルに書き込む場合、1バイトの書き込みと4kバイトの書き込みのコストはほぼ同じであることをご存知かもしれません。このような書き込みを実行するために必要な時間は、ディスクが回転して適切なセクターを探すために必要な時間であるアクセス時間(〜8ms)によって支配されます。
さらに、小さな書き込みを大きな書き込みに集約すると、オペレーティングシステムのオーバーヘッドを削減して、パフォーマンスを向上させることができます。
ほとんどのオペレーティングシステムには、書き込みをキャッシュするための内部バッファがあります。ただし、これらのキャッシュは、書き込みパターンを分析することにより、アプリケーションが何を行っているかを把握しようとします。アプリケーション自体がそのキャッシュを実行でき、データの準備ができたときにのみ書き込みを実行できる場合、結果(パフォーマンスの観点から)はより良くなります。
ハードディスクには情報ストレージの最小単位があるため、たとえば、1バイトを書き込んでいる場合、オペレーティングシステムはディスクにストレージの単位を保存するように要求します(最小は512バイトだと思います)。したがって、1 バイトの書き込みを要求すると、オペレーティング システムはさらに多くの書き込みを行います。512 の呼び出しで 512 バイトを格納するように要求すると、512 バイトをバッファリングして 1 つの呼び出し (1 つのディスク操作) のみを発行するよりも多くの I/O (512 のディスク操作) を実行することになります。