关闭I / O流
当我不关闭流时会发生什么坏事?
关闭操作是否自动冲洗?
程序退出后是否所有流都关闭了?
提前致谢。
不关闭流时可能发生的坏事:
- 你可以用完文件句柄
- 您认为写入磁盘的数据可能仍在缓冲区中(仅限)
- 其他进程可能仍会锁定文件(取决于平台)
- …
是的,关闭操作总是刷新流。
操作系统知道的所有文件句柄都已关闭。 这意味着将有效地关闭FileOutputStream
, FileInputStream
和Socket
的输入/输出。 但是如果在BufferedOutputStream
包装FileOutputStream
,则操作系统将不知道BufferedOutputStream
,并且在关闭时不会关闭/刷新。 因此,写入BufferedOutputStream
但尚未刷新到FileOutputStream
可能会丢失。
1)您不必要地占用系统资源(例如文件描述符)。 可能到了耗尽的程度。
2)是(尽管您应该检查您感兴趣的特定流的文档以确保)。
3)是的
要获得限定,当您执行close()时,它会刷新数据并关闭文件句柄。 如果退出,则文件句柄将关闭,但未刷新的数据将丢失。