我应该关闭org.apache.commons.io.IOUtils的InputStream吗?

时间:2016-04-26 10:03:05

标签: java inputstream apache-commons-io

我使用How to convert InputStream to virtual File上的答案,该答案使用org.apache.commons.io.IOUtils将给定的InputStream复制到FileOutputStream,以便创建File

我应该关闭给定的InputStream吗?

2 个答案:

答案 0 :(得分:6)

关闭InputStream是最佳做法。请参阅此question

org.apache.commons.io.IOUtils.copy不要关闭流。所以你必须关闭。

请参阅Javadoc

  

只要有可能,此类中的方法不会刷新或关闭   流。这是为了避免对此进行不可移植的假设   溪流的起源和进一步使用。因此呼叫者仍然负责   用于在使用后关闭流。

答案 1 :(得分:1)

修改:再次阅读问题后,我必须更正我的答案,因为问题显然是来自引用答案的InputStream,而不是OutputStream。需要关闭InputStream(请参阅@Adi的回答)。然而,OutputStream位于try-with-resources声明中,因此您不需要关闭。

问题中引用的答案是使用Java 7 try-with-resources Statement,它确保在语句结束时关闭资源。

  

try-with-resources语句是一个声明一个的try语句   或更多资源。资源是必须在之后关闭的对象   程序完成了。 try-with-resources语句   确保在声明结束时关闭每个资源。

因此对于OutputStream,在特定情况下,您不需要自己关闭OutputStream,前提是您正在尝试使用资源。

InputStream需要关闭