IOUtils:是否需要关闭OutputStream?
IOUtils: is it required to close OutputStream?
在this answer中,有人建议使用IOUtils.copy
,但他没有关闭OutputStream。这是他的例子:
InputStream is = new URL(imgUrl).openStream();
OutputStream os = servletResponse.getOutputStream();
IOUtils.copy(is, os);
is.close();
我在 IOUtils 中检查了 javadocs 中的 copy
方法,没有关于 OutputStream 将自动关闭的信息,所以我很好奇是否需要在该示例中关闭 OutputStream?
如您所说,the documentation 没有为您关闭 OutputStream
,因此您需要关闭它(明确地,或使用 try-with-resources)。
原因 Tomasz didn't close the stream in that answer was that it's the output stream of a servlet response. As andih said in ,您只关闭您 打开 的流。 servlet 容器管理 servlet 响应流。
IOUtils.copy(InputStream, OutputStream)
一定不要关闭OutputStream
。例如,您可以使用它来连接不同的 InputStreams
,在这种情况下,如果关闭提供的 Input- and/or OutputStream.
将是一个坏主意
根据经验,任何方法都应该只关闭它打开的那些流。
另见 Should I close the servlet outputstream?
在this answer中,有人建议使用IOUtils.copy
,但他没有关闭OutputStream。这是他的例子:
InputStream is = new URL(imgUrl).openStream();
OutputStream os = servletResponse.getOutputStream();
IOUtils.copy(is, os);
is.close();
我在 IOUtils 中检查了 javadocs 中的 copy
方法,没有关于 OutputStream 将自动关闭的信息,所以我很好奇是否需要在该示例中关闭 OutputStream?
如您所说,the documentation 没有为您关闭 OutputStream
,因此您需要关闭它(明确地,或使用 try-with-resources)。
原因 Tomasz didn't close the stream in that answer was that it's the output stream of a servlet response. As andih said in
IOUtils.copy(InputStream, OutputStream)
一定不要关闭OutputStream
。例如,您可以使用它来连接不同的 InputStreams
,在这种情况下,如果关闭提供的 Input- and/or OutputStream.
根据经验,任何方法都应该只关闭它打开的那些流。 另见 Should I close the servlet outputstream?