web-dev-qa-db-ja.com

Javaストリームのflush()の目的は何ですか?

Javaでは、flush()メソッドがストリームで使用されます。しかし、私はこの方法を使用するすべての目的が何であるか理解していませんか?

fin.flush();

いくつかの提案をしてください。

107
Venkat

flushメソッドの docs から:

出力ストリームをフラッシュし、バッファリングされた出力バイトを強制的に書き出します。フラッシュの一般的な規約は、それを呼び出すことは、以前に書き込まれたバイトが出力ストリームの実装によってバッファリングされた場合、そのバイトが目的の宛先に直ちに書き込まれることを示すことです。

バッファリングは主にI/Oパフォーマンスを改善するために行われます。これに関する詳細は、この記事から読むことができます: Tuning Java I/O Performance

92
codaddict

コマンドを入力すると、そのコマンドのストリームは、コンピューターのbuffer(一時的なメモリの場所)と呼ばれるメモリの場所に保存されます。すべての一時メモリの場所がいっぱいになったら、flush()を使用します。これは、すべてのデータストリームをフラッシュして完全に実行し、バッファの一時的な場所にある新しいストリームに新しいスペースを与えます。 -あなたが理解することを願っています

25
user3004437

ストリームにデータを書き込むとき、すぐには書き込まれず、バッファリングされます。したがって、バッファからのすべてのデータが確実に書き込まれるようにする必要がある場合は、flush()を使用します。

ストリームを閉じる前にすべての書き込みが完了していることを確認する必要があります。そのため、ファイル/バッファライターのclose()でflush()が呼び出されます。

ただし、ストリームを閉じる前に、すべての書き込みをいつでも保存する必要がある場合は、flush()を使用します

22
Biman Tripathy

バッファがいっぱいになっている場合、バッファにバッファされているすべての文字列は、ディスクに保存されます。バッファは、ビッグディールを避けるために使用されます!そしてオーバーヘッド。

Java libsに配置されたBufferedWriterクラスには、次のような1行があります。

private static int defaultCharBufferSize = 8192;

バッファがいっぱいになる前にデータを送信したい場合は、制御できます。ちょうどそれをフラッシュします。 writer.flush()の呼び出しは、「今、バッファにあるものは何でも送信してください!

リファレンスブック: https://www.Amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208

ページ数:453

7

ストリームは、コンテンツを定期的に空にし、たとえば、画面に表示したり、ソケットに送信したり、ファイルに書き込んだりするスレッドによって頻繁にアクセスされます。これはパフォーマンス上の理由で行われます。出力ストリームのフラッシュとは、停止し、ストリームのコンテンツが宛先に完全に転送されるのを待ってから、ストリームを空にしてコンテンツを送信した状態で実行を再開することを意味します。

4
Silvio Donnini

パフォーマンスの問題のために、最初のデータはバッファに書き込まれます。バッファがいっぱいになると、データが出力に書き込まれます(ファイル、コンソールなど)。バッファが部分的にいっぱいになり、output(file、console)に送信する場合は、部分的にいっぱいのバッファをoutput(file、console)に書き込むためにflush()メソッドを手動で呼び出す必要があります。

3
vijaya kumar