在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?
答案 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响应的输出流。正如andih中a comment所述,您只关闭打开的流。 servlet容器管理servlet响应流。