首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决Java BufferedWriter close()?

如何解决Java BufferedWriter close()?
EN

Stack Overflow用户
提问于 2018-10-25 00:52:42
回答 2查看 0关注 0票数 0

假设我有以下代码片段:

operation1();
bw.close();
operation2();

当我BufferedReader.close()从我的代码调用时,我假设我的JVM进行系统调用,以确保缓冲区已被刷新并写入磁盘。我想知道是否close()等待系统调用来完成其操作,或者它是否继续进行而operation2()无需等待close()完成。

为了重新解释我的问题,当我这样做时,我operation2()能否认为bw.close()已成功完成?

EN

回答 2

Stack Overflow用户

发布于 2018-10-25 09:24:42

由于以下原因,无法确定:

BufferedWriter是另一个Writer的包装器。BufferedWriter的close()只传播到底层的Writer。

如果这个底层Writer是一个OutputStreamWriter,并且如果OutputStream是一个FileOutputStream,那么close将发出一个系统调用来关闭文件句柄。

你完全可以自由地使用一个Writer,其中close()是noop,或者close是非阻塞实现的,但是当只使用java.io中的类时,情况绝对不是这样。

票数 0
EN

Stack Overflow用户

发布于 2018-10-25 10:38:50

java.io.BufferedReader.close()如果满足,则完全取自合同的JavaDoc java.io.Reader

关闭流并释放与其关联的所有系统资源。流关闭后,进一步的read(),ready(),mark(),reset()或skip()调用将抛出IOException。关闭先前关闭的流无效。

虽然在文件系统完成之前没有明确声明阻塞,但是BufferedReader如果close()返回则所有其他操作的相同实例将抛出异常。虽然可以看出JavaDoc在操作完成的时候是模棱两可的,但如果文件系统刷新和关闭在此方法返回时未完成,则会违反合同的精神并成为Java(实现或文档)中的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档