【发布时间】:2011-03-01 13:23:33
【问题描述】:
如果我不关闭流,可能会发生什么不好的事情?
关闭操作会自动刷新吗?
程序退出后所有的流都关闭了吗?
提前致谢。
【问题讨论】:
-
看到这篇文章,它有类似的问题和一些很好的答案。 stackoverflow.com/questions/515975/closing-streams-in-java
如果我不关闭流,可能会发生什么不好的事情?
关闭操作会自动刷新吗?
程序退出后所有的流都关闭了吗?
提前致谢。
【问题讨论】:
不关闭流时可能发生的坏事:
是的,关闭操作总是刷新流。
操作系统知道的所有文件句柄都已关闭。这实际上意味着FileOutputStream、FileInputStream 和Socket 的输入/输出将被关闭。但是,如果您将FileOutputStream 包装在BufferedOutputStream 中,那么操作系统将不知道BufferedOutputStream,并且不会在关机时关闭/刷新。因此,写入BufferedOutputStream 但尚未刷新到FileOutputStream 的数据可能会丢失。
【讨论】:
File*Stream 代表直接的操作系统资源(即打开的文件句柄)。 BufferedOutputStream 是包装另一个输出流的纯 Java 对象。操作系统不需要知道它的存在。
1) 您不必要地占用了系统资源(例如文件描述符)。可能已经用完了。
2) 是的(尽管您应该检查您感兴趣的特定流的文档以确定)。
3) 是的
【讨论】:
为了符合条件,当您执行 close() 时,它会刷新数据并关闭文件句柄。如果退出,文件句柄将关闭,但未刷新的数据会丢失。
【讨论】: