假设我有BufferedWriter
已写入5000行(其中一些尚未刷新)。
如果我在程序结束时没有close()
这个实例会有什么后果?
答案 0 :(得分:4)
如果在程序结束之前没有close()
,则永远不会写入尚未写入的缓冲数据。
BufferedWriter
在Java中完成所有缓冲(而不是仅仅依赖于操作系统的低级缓冲区)。因此,需要一个明确的操作来刷新缓冲区并关闭文件,因为这不会在程序退出时自动发生(主要是由于Java的GC性质以及缺少对何时和如果的保证,例如{{ 1}}被称为)。
所以finalize()
的缓冲区中的任何东西都会在程序退出时仍然存在,最终会永远丢失。
当你完成它们时,你应该养成BufferedWriter
流的习惯(并close()
任何引用也是如此,因此GC可以丢弃对象;这不是对null
的行为有任何影响,但这是一个很好的通用做法)。至少,如果您已经编写了重要数据,并且无论是否需要关闭流,都需要确保它已写入磁盘,您可以根据需要明确调用BufferedWriter
。
flush()
can be found here的源代码,如果您想了解实施情况。
答案 1 :(得分:0)
实际上可能无法将数据写入到写入数据的任何位置。因此,你将失去尚未编写的任何东西。
这样一个问题的问题在于它让人们想知道你为什么要问。你尝试成为一个可怕的人而不是关闭你的作家?你真的有这样的情况,关闭作家是你不想做的事情吗?
答案 2 :(得分:0)
如果您不喜欢关闭流,那么使用JDK 1.7中引入的try-with-resource,新功能,它将关闭所有实现Closable接口的此类对象