根据java文档,在任何java.io Streams上调用close()会自动调用flush().但是我已经在很多例子中看到过,即使在生产代码中,开发人员在close()之前也明确地使用了flush().在什么条件下我们需要在close()之前使用flush()?
Boz*_*zho 30
我想在许多情况下,这是因为他们不知道close()也会调用flush(),所以他们想要安全.
无论如何,使用缓冲流应该使手动刷新几乎是多余的.
Pet*_*rey 29
在编写必须发送的内容之后,开发人员养成了调用flush()的习惯.
恕我直言使用flush()然后close()是很常见的,例如
// write a message
out.write(buffer, 0, size);
out.flush();
// finished
out.close();
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,flush()是多余的,但意味着您正在遵循模式.
我想指出一个重要的概念,许多以前的评论都提到过:
流的close()方法不一定调用flush().
例如org.apache.axis.utils.ByteArray #close() 不会调用flush().
(点击链接查看源代码)
这同样适用一般多为任何实现Flushable和Closeable。一个突出的例子是java.io.PrintWriter。它的close()方法不会调用flush().
(点击链接查看源代码)
这可能解释了为什么开发人员flush()在关闭他们的流之前谨慎地调用。我个人遇到过生产错误,其中close()在没有首先调用flush().
| 归档时间: |
|
| 查看次数: |
30152 次 |
| 最近记录: |