最近、私はIOストリームを学び、フラッシュ()関数が毎回表示されることを発見しました。私はその機能をチェックしましたが、主な機能は次のとおりです
// - - - - - - 、、、、、、、、、、、、、、、 - - - 、、、、、、 - 、、、、、、、(
一般的で誤った答え:
バッファー内のデータは、バッファがいっぱいになるまで保存されます。フラッシュメソッドを使用して、バッファ内のデータを強制的に書き留めたり、close()メソッドを使用してストリームを閉じたりすることもできます。ストリームを閉じる前に、バッファ出力ストリームは一度にバッファデータを書き出します。 flash()とclose()はどちらもデータを書き留めることを強制するため、2つの結果は同じです。あなたがそれを書いていない場合、あなたはそれを正常に書き出すことができないことがわかります。
上記の答えに応じて、正確な答えが与えられました
FileOutputStreamはoutputStreamを継承し、flush()メソッドの書き換えを提供しません。したがって、どれだけのコンテンツが書き込まれても、バイナリストリームを基礎となるオペレーティングシステムのI/Oに直接渡します。フラッシュは効果がありません。バッファリングされたシリーズの入力および出力ストリーム機能は、バッファーを使用するというバッファーという単語から見ることができます。アプリケーションは、IOが非常に低いたびにデバイスと通信する必要があります。したがって、効率を向上させるために、バッファーは最初にデバイスに書き込むときにバッファーに書き込まれます。バッファに十分なデータがある場合、デバイス全体に書き込まれます。
BufferedXXXStreamを使用します。デフォルトのバッファサイズは8Kです。読み取ると、バッファーは常に充填されます(またはファイルが読み取られます)。書くとき、バッファがいっぱいになった後、コンテンツはカーネルバッファーに送信されます(またはフラッシュ操作)。高い効率の理由は、すべてのバイト読み取りのオペレーティングシステムカーネルに陥らないようにするためです(これは時間のかかる操作です)。特定のコードについては、自分でAPIを確認してください。
また、Baiduからの質問回答も添付します。
flush()とは、バッファーの内容を書き留めることを意味します。オペレーティングシステムの特定のメカニズムのため、継続的なディスクの読み取りと書き込みを防ぐために、執筆の遅延の概念があります。 (Fruit()リフレッシュと混同しないように注意してください。主にIOで使用されています。つまり、バッファデータをクリアします。一般に、ストリームを読み書きするとき、データは最初にメモリに読み込まれ、次にファイルに書き込まれます。データを読むとき、それはあなたのデータが書き込まれたことを意味しません。なぜなら、メモリバッファに残される可能性のあるその一部がまだあるからです。この時点で、close()メソッドを呼び出して読み取りおよび書き込みストリームを閉じる場合、データのこの部分が失われるため、読み取りおよび書き込みストリームを閉じる前に()フラッシュする必要があります。 。
ネットワークWebサーバーでも同じことが言えます。バイトの作成後にメッセージが送信されるのを防ぐために、64Kメモリ領域などのバッファーの概念があり、バッファがいっぱいになると、すぐにディスクに書き込まれます(またはクライアントブラウザに送信されます)。
フラッシュメソッドは、通常、プログラムの書き込みが完了すると実行されます。次に、閉じる方法に従います。例えば:
//出力ストリームを取得します。もちろん、特定の環境に依存します。 printwriter out = util.getWriter(); out.println( "出力いくつかの情報、多分たくさん"); out.flush(); out.close();
簡単に言えば、Flush()メソッドは、メモリに保存されているすべてのコンテンツ(バッチ出力)を出力することです。たとえば、一般的に使用されるのは、FileWriterクラスの典型的な例です。フラッシュ出力を使用することに加えて、最終的なCloseメソッドへの呼び出しもバッチ出力になります。
import java.io.filewriter; Import java.io.ioexception; public class a04 {public static void main(string args []){filewriter fw; try {fw = new filewriter( "c://try.txt"); fw.write( "hello"); // fw.close(); //この文は追加されておらず、ファイルを書き込むことができず、ファイルは空白です! system.out.println( "ok"); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); }}}要約します
上記は、Java言語でのフラッシュ関数の役割と使用方法に関するこの記事のすべての内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!