如何在 Java 中使用流时修复"流关闭"错误

  • 本文关键字:错误 Java java filestream
  • 更新时间 :
  • 英文 :


问题是:当我在以下代码上运行声纳检查(分析我的错误代码)时,它会抱怨classa-> createfile()中的fileInputStream并未关闭。我了解这是一种资源泄漏,需要关闭。但是,如果我使用资源尝试或关闭流中的流,ClassB抱怨说,它在关闭时无法读取流。

解决此问题的最佳方法是什么?

代码块:

public ClassA{
    public ClassB createFile(){
        return new ClassB(new FileInputStream(new File("filePath")), revision, .. other arguments);
    }
}
public ClassB{
    public ClassB(InputStream fileInputStream, String revision, other arguments){
        // save the arguments in class variables. Do something with stream
    }
}

用于资源(您需要关闭的内容),您将获得三个选项:

1)您在这里创建它,在此处关闭:使用try-with-with-resources构造。

2)您将资源传递给对象,然后该对象本身就是可关闭的资源;关闭该资源时,它关闭了其中的资源。

3)奇怪的东西,不推荐,诸如Sonar之类的衬里会标记为有问题,难以调试等等。

自然,您应该尽可能避免#3。

在这里,看起来您有2个可行的选项:

  1. 使classB实现自动固有性,并在其关闭方法或

  2. 中关闭该输入
  3. ,而不是传递一个可以从中派生输入流的东西,以便使用它的classB代码可以完成try-with-resources事情。据推测,您可能会通过路径或文件对象而不是输入式。

相关内容

  • 没有找到相关文章

最新更新