假设我有一个 BufferedWriter 已写入 5000 行(其中一些尚未刷新)。
如果我不在程序结束时close()
此实例,会产生什么后果?
最佳答案
如果在程序结束之前没有close()
它,则尚未写入的缓冲数据将永远不会被写入。
BufferedWriter
在 Java 领域中完成所有缓冲(而不是仅仅依赖于操作系统的较低级别缓冲区)。因此,它需要一个显式的操作来刷新缓冲区并关闭文件,因为当程序退出时这不会自动发生(主要是由于 Java 的 GC 性质以及缺乏对何时和是否的保证,例如,finalize()
被调用)。
因此,当程序退出时,BufferedWriter
缓冲区中仍然存在的任何内容最终都会永远丢失。
您应该养成在使用完流后close()
关闭流的习惯(并且也null
对它们的任何引用,以便GC可以丢弃该对象;这对 BufferedWriter 的行为没有任何影响,但这是一个很好的常规做法)。至少,如果您已写入重要数据,并且无论是否需要关闭流,都需要确保其已写入磁盘,您可以根据需要显式调用 flush()
。
BufferedWriter的源代码can be found here ,如果您想查看实现。
关于java - 不关闭 BufferedWriter 的后果是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549342/