关闭I / O流

当我不关闭流时会发生什么坏事?

关闭操作是否自动冲洗?

程序退出后是否所有流都关闭了?

提前致谢。

不关闭流时可能发生的坏事:

  • 你可以用完文件句柄
  • 您认为写入磁盘的数据可能仍在缓冲区中(仅限)
  • 其他进程可能仍会锁定文件(取决于平台)

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

操作系统知道的所有文件句柄都已关闭。 这意味着将有效地关闭FileOutputStreamFileInputStreamSocket的输入/输出。 但是如果在BufferedOutputStream包装FileOutputStream ,则操作系统将不知道BufferedOutputStream ,并且在关闭时不会关闭/刷新。 因此,写入BufferedOutputStream但尚未刷新到FileOutputStream可能会丢失。

1)您不必要地占用系统资源(例如文件描述符)。 可能到了耗尽的程度。

2)是(尽管您应该检查您感兴趣的特定流的文档以确保)。

3)是的

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