FileInputStream and closing



在我的代码中,只要需要将FileInputStream作为参数,我就这样做:

new obj(new FileInputStream(fileLocation));

由于我没有将FileInputStream分配给任何参考变量,因此我没有使用close()方法关闭它。

这会导致内存泄漏吗?

上述方式释放的资源不就是FileInputStream吗?

如果没有引用到你的输入流,它将被垃圾收集,流将自动关闭-参见FileInputStream.finalize()方法。然而,这不是一个好的编程实践,因为您不知道垃圾收集何时发生。这可能导致内存泄漏。

正确和更安全的方法是在资源块中使用try,或者在旧的java版本中使用try-catch-finally,在finally块中关闭流-我个人喜欢Apache Commons中的IOUtils,您不必关心close()方法抛出的IOException

一般的答案是否定的。如果你所知道的对象是一个对象,那么你不能假设它会关闭FileInputStream自己,你应该确保自己处理;Java7中的"使用资源尝试"使这个问题变得微不足道。

try(FileInputStream fileStream =new FileInputStream(fileLocation);){
   Obj obj = new Obj(new obj(fileStream));
} catch (IOException ioe) {
    //handle exception
}

另一方面,如果您知道该对象实现了AutoClosable接口,您可以假设当另一个对象关闭时,FileInputStream也将关闭。

来自Javadocs:

关闭该资源,放弃所有底层资源。这方法管理的对象上自动调用try-with-resources声明。

<>共舞,强调我的

相关内容

  • 没有找到相关文章

最新更新