IOUtils 的潜在资源泄漏像顽固的骡子一样持续存在
Potnetial Resource Leak with IOUtils Persists like a Stubborn Mule
我正在使用 IOUtils
从 HttpServletRequest 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
很可能 return 每次调用 getInputStream
时都会有一个 new 输入流,所以关闭新的输入流没有帮助。
将输入流保存在一个变量中。最重要的是,使用 try-with-resources:
try (InputStream stream = request.getInputStream()) {
data = IOUtils.toString(stream, "UTF-8");
}
我正在使用 IOUtils
从 HttpServletRequest 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
很可能 return 每次调用 getInputStream
时都会有一个 new 输入流,所以关闭新的输入流没有帮助。
将输入流保存在一个变量中。最重要的是,使用 try-with-resources:
try (InputStream stream = request.getInputStream()) {
data = IOUtils.toString(stream, "UTF-8");
}