A class 打开一个 Filestream 用于在构造函数中写入。您如何确保垃圾收集器启动时文件流已关闭?

A class opens a Filestream for writing in the constructor. How can you assure that the file stream is closed when the garbage collector kicks in?

我在 java 面试中遇到了这个问题。他们还问:

在 java 中有什么更好的替代方法来处理要写入的文件,同时确保它们正确关闭?

我的解决方案是在构造函数中使用try/finally语句,我的替代方案是将文件操作封装到特定的方法中,使用filereader处理文本,使用fileinputstream处理媒体文件。

我在这里提问是想看看有没有更好的解决办法。

这里C++的标签是因为这个角色是C++/java角色。所以面试官也问了我对C++这道题的想法。

在 Java 中处理此问题的最佳方法是在您要删除对它的最后一次引用时自行关闭流。只要对象仍然被引用,垃圾收集器就不会启动。

虽然 Java 通过 finalize() 方法的实现有一种析构函数,但不能保证会被调用。如果有足够的内存可用,因此不需要重用它,您可能仍然会浪费 OS 资源。

他可能正在寻找诸如 'make the class implement AutoCloseable' 之类的答案,在这种情况下可以使用 try-with-resources。