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 - R.layout 类型未定义方法 findViewById(int)

java - Play Framework 中访问的模型类变量的相反 boolean 值

java - 检查 Java 正则表达式中模式的第 n 次出现

c++ - 建议 : asynchronous, c++ 中的可移植文件 io

java - 用于即时读取/拉取的自定义缓冲输入流

haskell - 传递字符串以在终端中编辑,并在 Haskell 程序中使用 Enter 键确认

java - IntelliJ IDEA 菜单弹出窗口关闭得太快

java - 使用多线程写入文件

java - 无法使用 BufferedWriter 写入文件