0

バッファを超えるためにどのくらいの時間書き込む必要があるかを知りたいので、バッファを自動的にフラッシュします。

try
    {
        BufferedWriter br = new BufferedWriter(new FileWriter(file),1);

            br.write("How much should I write in order to get it flushed without using .flush() nor close());

close() が自動的にバッファをフラッシュすることは認識していますが、バッファがいっぱいになり、より多くの入力を受け取ると、それをフラッシュしてからより多くの入力を取得することも認識しています。1コンストラクタで指定したサイズ? かなり入力しましたが、結果はありません。PS: バッファが舞台裏でどのように機能するかを理解するためのものです。

前もって感謝します。

4

3 に答える 3

1

Writer契約による。Writer の使用が終了したら、必ず close() を呼び出して、データの書き込みを終了し、そのリソースを閉じることができるようにする必要があります (この場合は、へのファイル ハンドラーfile)。

それ以外は、バッファ サイズなどの実装の詳細は、Java の将来のバージョンで変更される可能性があるため、または使用する Writer の実装を変更した場合に、気にする必要はありません。

また、Buffered Writer の全体的なポイントは、データの大きなチャンクをバッファーに集めてからバッファー全体を一度に書き込むことにより、データが実際にディスクに書き込まれる回数を減らすことです。バッファが 1 の BufferedWriter を作成すると、この目的が無効になります。

于 2013-07-29T14:17:10.997 に答える
1

のいずれかBufferedWriterwriteメソッドの Java ソースを見るflushBufferと、メソッド呼び出しが表示され、それが を呼び出しますout.write(...)。を呼び出しませんout.flush()

これがより理解しやすい言葉で意味することは次のとおりです。

はい、すべての文字の後にフラッシュされますが、実際のファイルではなく、基になるファイルWriter(FileWriterこの場合) にフラッシュされます ( とは対照的に、flush基になるファイルを実際のファイルにフラッシュします)。フラッシュが発生する独自のスケジュールがあります(完全にはわかりませんが、バッファサイズは で定義されているデフォルトであると思います)。flushBufferout.flush()WriterFileWriterStreamEncoder8192

于 2013-07-29T14:36:01.117 に答える