当前位置: 首页 > 知识库问答 >
问题:

为什么这段代码会生成“潜在资源泄漏”警告?

彭鸿彩
2023-03-14

Eclipse(Juno)发出以下警告:

static void saveDetails(byte[] detailsData) {
    OutputStream os = null;
    try {
        os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE);
        os.write(detailsData);
    } catch (IOException e) {
        Log.w(LOG_TAG, "Unable to save details", e);
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException ignored) {
            }
        }
    }
}

共有1个答案

谷梁振
2023-03-14

在我看来,这是一个假阳性。您的资源被关闭在一个“finally”块中,所以我看不出这里会出什么问题。

顺便说一句,如果您正在使用Java7,我建议您使用“使用资源尝试”的习惯用法。

static void saveDetails(byte[] detailsData) {    
    try (OutputStream os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE);) {
        os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE);
        os.write(detailsData);
    } catch (IOException e) {
        Log.w(LOG_TAG, "Unable to save details", e);
    }
}
 类似资料:
  • 我有一个连接到MySQL的服务方法,可以在中获取数据,最后在

  • eclipse“潜在资源泄漏”警告不正确。 没有警告: 警告:潜在资源泄漏:“此位置可能未关闭响应” 为什么第二种方法会引起警告? 谢谢!

  • 我是个新手。我已经编写了这段代码,它显示那里存在资源泄漏 这是什么意思?抱歉,我太天真了。

  • 在中,我收到了一个警告,我不明白这一点。 这是理解问题还是java/eclipse问题?

  • 我在IOUtils上使用了一个很好的函数,名为“closequity”,它可以关闭流,不管流中有什么。 例如: 不知何故,当我在最后一个块中调用它时,它也隐藏了Eclipse上的警告,即“资源泄漏:‘输入’在此位置未关闭”。 这意味着在上述代码中,没有此类警告。 我不明白它是如何隐藏对自身“外部世界”的警告的。 我试图通过复制这个库的代码来检查它(这里的例子),但是当我在新类上使用它时,警告会出现

  • 在哪种情况下会发生这种情况?