私は、フラッシュとクローズの方法について本当に混乱しています。私のコードでは、常にFileOutputStream
オブジェクトを閉じています。しかし、ここでフラッシュメソッドを使用する必要がある場合、どこで使用できるかを知りたいのですが。
4、5ファイルを繰り返しダウンロードするプロジェクトを書きます。メソッド(ファイルのダウンロード用)を記述し、私のメソッドはループにあり、ファイルを繰り返しダウンロードします。私のメソッドには次のようなコードがあります。
close
メソッドはflush
を呼び出しますか、それとも閉じる前にフラッシュを使用する必要がありますか?
try {
InputStream inputStream = con.getInputStream();
FileOutputStream outputStream = new FileOutputStream("C:\\programs\\TRYFILE.csv");
int bytesRead = -1;
byte[] buffer = new byte[4096];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch(Exception e) {
//
} finally {
outputStream.close();
inputStream.close();
}
コードが適切に機能することに注意してください。ファイルが正常にダウンロードされます。しかし、flush
を使用するかどうかはわかりません。
flush
メソッドは、バッファに保持されているバイトを「フラッシュ」するために使用されます。 FileOutputStream
はバッファを使用しないため、flushメソッドは空です。それを呼び出しても、呼び出さなくても、コードの結果は変わりません。
バッファ付きライターでは、メソッドclose
は明示的にflush
を呼び出します。
したがって、データを書き込みたいときは、flushを呼び出す必要がありますストリームを閉じる前かつバッファがいっぱいになる前(バッファがいっぱいになると、ライターはフラッシュ呼び出しを待たずに書き込みを開始します)。
クラスFileOutputStream
のソースコードには、メソッドflush
のカスタムバージョンがありません。したがって、使用されるflush
メソッドは、そのスーパークラスOutputStream
のバージョンです。 OutputStream
のflushのコードは次のとおりです
public void flush() throws IOException {
}
ご覧のとおり、これは何もしない空のメソッドであるため、それを呼び出すかどうかは同じです。