我对 flush 和 close 方法真的很困惑。在我的代码中,我总是关闭我的 FileOutputStream
对象。但是我想知道如果我必须在这里使用 flush 方法,我应该在哪里使用它?
我将编写一个重复下载 4 或 5 个文件的项目。我会写一个方法(下载文件),我的方法会在一个循环中重复下载文件。我的方法会有这样的代码。
close
方法是否调用 flush
,还是我必须在关闭前使用 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(当缓冲区已满时,编写器开始写入而无需等待 flush 调用)。
FileOutputStream
类的源代码没有方法 flush
的自定义版本。所以使用的flush
方法是其父类(super class)OutputStream
的版本。 OutputStream
中flush的代码如下
public void flush() throws IOException {
}
如您所见,这是一个什么都不做的空方法,所以调用与否都是一样的。
关于java - FileOutputStream: "close"方法是否也调用 "flush"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31456660/