java - FileOutputStream: "close"方法是否也调用 "flush"?

标签 java io fileoutputstream

我对 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/

相关文章:

java - 将 OpenGL 与 LWJGL 结合使用不会生成图片

java - 如何在 Selenium 中使用 IEDriver?

haskell - Haskell 的 "do"关键字有什么作用?

android - 无法将位图写入 SD 卡

java - 为什么这个递归方法超出了我的预期

java - 语法错误: missing ] after element list in jquery

python-3.x - 如何在 Django 中正确创建 InMemoryUploadedFile 对象

c# - 如何在 .NET 中正确读取串行端口

android 错误 : java. io.filenotfoundexception/proc/net/xt_qtaguid/stats + 打开失败:ENOENT(没有这样的文件或目录)

java - 为什么 FileOutputStream 写入磁盘上的不同位置?