java - 不关闭 BufferedWriter 的后果是什么

标签 java io bufferedwriter writer

假设我有一个 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/

相关文章:

java - 如何将文本属性集保存到文件中?

java - BufferedWriter 到 ProcessBuilder 输入?

java - 关闭 Java 中的包装资源

java - 使用 BufferedWriter 从用户获取输入并将其写入文件

java - 同时打开多个套接字

java - string.equals(string2) 返回 false,尽管两个字符串完全相同,即使长度相同

python - 如何在Python中以列表列表的形式读取txt文件并轻松访问它?

C编程,如何在多个字段类型中使用定界符%

java - 在 AWS Lambda Java 项目中从 API 网关获取映射模板作为 JSON

java - Java 中 while 循环内的 Try-Catch