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

IOUtils的潜在资源泄漏像一头倔强的骡子一样持续存在

乜明朗
2023-03-14

我正在使用IOUtilsHttpServletRequest请求中解析JSON

baseRequest.setAuthentication(null);
    
response.setContentType("application/json");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);   
    
PrintWriter writerResponse = response.getWriter();
    
    
-> String data = IOUtils.toString(request.getInputStream(), "UTF-8"); <-

但Eclipse抱怨可能存在资源泄漏:

Potential resource leak: '<unassigned Closeable value>' may not be closed

甚至当我用try/finally阻塞并通过IOUtils关闭它时。closequilly()错误像一头倔强的骡子一样持续存在。

String data = "";
try {
    data = IOUtils.toString(request.getInputStream(), "UTF-8");
} catch (IOException e) {
       
} finally {
       IOUtils.closeQuietly(request.getInputStream());
}

导致此错误的原因是什么?如何修复?

附笔

代码如下:

try {
    String data = IOUtils.toString(request.getInputStream(), "UTF-8");
} catch (IOException e) {
       
} finally {
       IOUtils.closeQuietly(request.getInputStream());
}

不会引发任何错误,只要我尝试在代码中的任何地方(甚至在try语句中)使用值“data”,错误就会再次出现。


共有1个答案

袁霍英
2023-03-14

getInputStream可能会在每次调用getInputStream时返回一个新的输入流,因此关闭一个新的输入流没有帮助。

将输入流保存在变量中。最重要的是,使用try with资源:

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

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

  • 我有一个连接到MySQL的服务方法,可以在中获取数据,最后在

  • 问题内容: 我正在遍历String类API,由于子字符串方法与原始String共享相同的字符数组,因此似乎存在潜在的内存泄漏。 如果原始字符串很大,则子字符串返回的小字符串可以防止原始字符串(由大数组备份)被Java垃圾回收。 任何想法或我读错了API。 问题答案: 还有 就是 对内存泄漏潜在的,如果你把一个相当大的字符串的一个子并不能复印(通常是通过构造函数)。 请注意,自Java 7u6以来,

  • Eclipse Java警告:资源泄漏:“Unassigned Closeable Value”从不关闭 漏在哪里?

  • 大家晚上好。我是一个使用Java编程的完全初学者,我正在学习“扫描仪”,但是当我在Eclipse中键入这个基本代码时,我收到一条消息说“资源泄漏:‘扫描仪’永远不会关闭。 我做错了什么?