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?