ioutil的潜在资源泄漏像顽固的骡子一样持续存在



我使用IOUtilsHttpServletRequest request解析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.closeQuietly()关闭它,错误仍然像一头倔强的骡子一样存在。

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

} finally {
IOUtils.closeQuietly(request.getInputStream());
}

是什么导致这个错误,我如何修复它?

p。S

下面的代码:

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

} finally {
IOUtils.closeQuietly(request.getInputStream());
}

不会抛出任何错误,只要我尝试在代码中的任何地方使用值'data'(即使在try语句中),错误就会再次出现。

错误是正确的。getInputStream很可能在每次调用getInputStream时返回一个新的输入流,因此关闭一个新的输入流并没有帮助。

将输入流保存在一个变量中。最好使用try-with-resources:

try (InputStream stream = request.getInputStream()) {
data = IOUtils.toString(stream, "UTF-8");
}

相关内容

最新更新