【问题标题】:How manage correctly a OutputStream to avoid resource leak errors如何正确管理 OutputStream 以避免资源泄漏错误
【发布时间】:2018-07-04 22:11:34
【问题描述】:

我已经被这个问题困扰了一段时间,我已经阅读了一些关于如何实现 inputStream 变量及其生命周期的教程和文档,但是我再次遇到了由静态分析器“推断”标记的相同错误来自 facebook,这表明我在此代码中存在以下问题:RESOURCE_LEAK

File file = new File(PATH_PROFILE + UserHelper.getInstance().getUser().getId() + ".jpg");
    OutputStream os = null;
    try {
        os = new FileOutputStream(file);
        os.write(dataBytes);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (os != null) {
            try {
                os.flush();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

描述错误是:

错误:RESOURCE_LEAK 在第 494 行调用 FileOutputStream(...) 获得的 java.io.FileOutputStream 类型的资源在第 499 行之后不会释放。

但是我在 finally 块中释放它,这是一个错误的错误警报?或者我错过了什么?因为我在这方面已经有一段时间了,我不知道错误在哪里。

非常感谢您的帮助和支持。

【问题讨论】:

    标签: java android facebook outputstream facebook-infer


    【解决方案1】:

    使用 try-with-resources(从 Java 7 开始可用)。

    File file = new File(PATH_PROFILE + UserHelper.getInstance().getUser().getId() + ".jpg");
    try (OutputStream os = new FileOutputStream(file)) {
        os.write(dataBytes);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    要了解更多信息,请阅读:

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2013-01-23
      • 2021-01-25
      • 2017-09-09
      • 2019-06-06
      • 1970-01-01
      相关资源
      最近更新 更多