2011-03-01 179 views
3

当我不关闭流时会发生什么坏事?关闭输入/输出流

关闭操作是否会自动刷新?

程序退出后,所有流都关闭了吗?

在此先感谢。

+0

看到这篇文章,它有类似的问题,一些很好的答案。 http://stackoverflow.com/questions/515975/closing-streams-in-java – Mudassir

回答

7

,当你不收您的视频流,可以发生不好的事情:

  • 可以运行出的文件句柄
  • 数据,你认为被写入磁盘可能仍然是在缓冲区(只)
  • 文件可能仍然被锁定其他进程(取决于平台)
  • ...

是的,关闭操作总是刷新流。

操作系统知道的所有文件句柄都已关闭。这意味着FileOutputStream,FileInputStreamSocket的输入/输出将被关闭。但是,如果您将FileOutputStream包装在BufferedOutputStream中,那么BufferedOutputStream而不是被OS知道,而不会在关闭时被关闭/刷新。因此写入BufferedOutputStream但尚未刷新到FileOutputStream的数据可能会丢失。

+0

SO当程序退出时,所有流都会自动关闭.. close操作自动刷新..所以我很安全不是它 – saravanan

+0

其实:我没有完全正确。我编辑了我的答案。 –

+1

为什么FileInputStream和OutputStream只知道os ..为什么BufferedOutputStream – saravanan

3

1)您不必要地捆绑系统资源(例如文件描述符)。可能会耗尽他们的程度。

2)是的(虽然你应该检查你感兴趣的特定流的文档以确保)。

3)是

+0

在我工作的前一个人的项目中,没有关闭文件描述符,运行几天后出现了数千个例外:D – Serhiy

1

要进行限定,执行close()时,将刷新数据并关闭文件句柄。如果退出,文件句柄关闭,但未刷新的数据丢失。