当前位置: 首页 > 面试题库 >

FileOutputStream:“ close”方法是否也调用“ flush”?

茅慈
2023-03-14
问题内容

我对flush和close方法感到非常困惑。在我的代码中,我总是关闭我的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 。

class的源代码FileOutputStream没有method的自定义版本flush。因此,flush使用的方法是其超类的版本OutputStream。刷新的代码OutputStream如下

public void flush() throws IOException {
}

如您所见,这是一个不执行任何操作的空方法,因此调用它与否是相同的。



 类似资料:
  • 问题内容: 我无法通过一些Google搜索找到权威的答案。在Java Servlet中,可以通过response.getOutputStream()或response.getWriter()访问响应主体。写入流后,是否应该在此流上调用.close()? 一方面,Blochian鼓励始终关闭输出流。另一方面,我不认为在这种情况下有需要关闭的基础资源。套接字的打开/关闭在HTTP级别进行管理,以允许诸

  • 我想知道,在语句类中调用close方法是否也会中止数据库中的sql查询,类似于如何取消方法?

  • 关闭活动的非模态气球。只有在回调过程中才能使用此方法。 expression.Close expression 必需。该表达式返回一个Balloon 对象。 示例 本示例可实现的功能为:显示这样一个气球,该气球包含三台打印机各自的按钮。无论何时,只要用户单击其中任何按钮,ProcessPrinter 回调进程即开始运行,而该气球关闭。 Sub selectPrinter() Set bln = A

  • 我试图用glRotatef旋转空间中的特定物体。我不太确定它在引擎盖下是如何工作的,所以我不确定我为对象顶点设置的法向量是否会随着顶点坐标旋转。我只需要知道它是否也旋转法线。

  • 问题内容: 是的方法曾经叫什么名字?如果是这样,什么时候调用它?如果开发人员未调用它,为什么会出现在其中?该功能真正发生了什么?我已经看到了删除所有表的示例,但是有一条评论说删除所有表不是您应该做的。有什么建议? 问题答案: 当您构造一个比打开的数据库版本新的SQLiteOpenHelper时,将调用它。做什么取决于新旧版本之间在数据库中所做的更改。不删除已更改的表的唯一情况是,更改所注意的不只是

  • 做 截断如果它已经存在?令人惊讶的是,Java的API留档没有说。API也不会留档Java7。语言本身的规范对类的语义学没有什么可说的。 我知道 导致附加到文件。但附加和截断并不是唯一的可能性。如果将100个字节写入1000字节的文件,一种可能性是最后900个字节保持原样。