如何正确管理OutputStream以避免资源泄漏错误

时间:2018-07-04 22:11:34

标签: java android facebook outputstream facebook-infer

我已经被这个问题困扰了一段时间了,我已经阅读了一些有关如何实现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   通过在第499行调用java.io.FileOutputStream获得的FileOutputStream(...)类型的资源不会在第499行之后释放。

但是我在finally块中释放了它,这是一个错误错误警报?还是我缺少什么?因为我已经有一段时间了,但我无法弄清错误在哪里。

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

1 个答案:

答案 0 :(得分:3)

使用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();
}

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