3

ちょうどそれを読んだ

一部のバッファー出力クラスは、オプションのコンストラクター引数で指定された autoflush をサポートしています。autoflush が有効になっている場合、特定のキー イベントによってバッファがフラッシュされます。たとえば、autoflush PrintWriter オブジェクトは、println または format が呼び出されるたびにバッファをフラッシュします。

したがって、しばらくの間 BufferReader の参照を保持していて、それがフラッシュされた場合、すべてのデータがどのように保持されるのでしょうか? 自動的にフラッシュしてコンテンツを再度読み取るコールバックメカニズムはありますか、それともデータを失い、再度呼び出す必要がありますか?

4

2 に答える 2

4

したがって、BufferReaderの参照をしばらく保持していて、それがフラッシュされた場合、すべてのデータはどのように保持されますか?

私はあなたが意味すると思いますBufferedWriter。(ReaderまたはInputStreamAPIのどちらにもflush()メソッドはありません。フラッシュは「ソース」では意味がありません。)

フラッシュされたデータは、ストリームの「シンク」に書き込まれます。つまり、ファイルやソケットなどです。したがって、ファイル(またはその他)を見ると、ストリームが(正常に)フラッシュされていれば、データはそこにあります。

自動的にフラッシュしてコンテンツを再度読み取るコールバックメカニズムはありますか?

コールバックメカニズム1はありません。(少なくとも、標準クラスライブラリが提供するバッファリングされたストリームクラスのいずれにもありません:カスタムクラスが何をする可能性があるかを誰が知っていますか...)

特定のことが発生すると、データは自動的にフラッシュされます。たとえば、アプリケーションがprintlnPrintWriterに対して...を呼び出す場合。

...または、データが失われ、再度呼び出す必要がありますか?

これは、文法的にも意味的にも意味がありません。あなたが何を求めているのかわかりません。

おそらくあなたはフラッシングが何をするのか理解していないでしょう。フラッシュとは、単にデータをバッファからプッシュし、ストリームがデータを送信する場所にプッシュすることを意味します。明示的なflush()呼び出しまたは自動フラッシュは、単に「今すぐ書き込む」ことを意味します。


1-ちなみに、方法もBufferedWriterありませんfinalize()。これは、出力がバッファリングされている間にこれらのオブジェクトの1つに到達できなくなった場合、その出力が書き込まれることはないことを意味します。

于 2012-04-29T06:25:28.543 に答える
0

バッファリングされたリーダーライターの間で混乱していると思います。あなたのステートメントはバッファリングされたライターについて話しているので、ストリームに書き出す場合は、それが物理的に書き込まれるのか、バッファにのみ書き込まれるのかを気にする必要はありません。Javaには関係ありません。

バッファリングされたリーダーがフラッシュされないことを願っていますが、バッファのタイプによっては問題ない場合があります。たとえば、ファイルから読み取る場合、バッファがフラッシュされる可能性があり、ファイルシステムからファイルを再度読み取る必要がありますread()。ただし、他のストリーミングコンテンツの場合は、バッファ内のデータがすべて失われるため、自動的にフラッシュされることは望ましくありません。

于 2012-04-29T06:26:46.733 に答える