IOUtils:是否需要关闭OutputStream?

时间:2016-07-17 08:37:28

标签: java apache-commons outputstream

this answer中,有人建议使用IOUtils.copy,但他没有关闭OutputStream。这是他的例子:

InputStream is = new URL(imgUrl).openStream();
OutputStream os = servletResponse.getOutputStream();

IOUtils.copy(is, os);
is.close();

我在IOUtils中检查了copy方法的javadocs,并且没有关于OutputStream将自动关闭的信息所以我很好奇是否需要关闭该示例中的OutputStream?

2 个答案:

答案 0 :(得分:2)

IOUtils.copy(InputStream, OutputStream)不得关闭OutputStream。例如,您可以使用它来连接不同的InputStreams,在这种情况下,如果它将关闭提供的Input-和/或OutputStream将是一个坏主意。

根据经验,任何方法都应该只关闭它打开的那些蒸汽。 另请参阅Should I close the servlet outputstream?

答案 1 :(得分:1)

正如您所说,the documentation没有说明为您关闭OutputStream,因此您需要关闭它(明确地,或使用try-with-resources)。

Tomasz在该答案中没有关闭流的原因是它是servlet响应的输出流。正如andiha comment所述,您只关闭打开的流。 servlet容器管理servlet响应流。