在读取ClassLoader.getSystemResourceAsStream之后,我们是否需要明确地关闭输入流?

时间:2012-02-27 02:58:19

标签: java properties inputstream

对ClassLoader.getSystemResourceAsStream的调用会打开最终转换为属性的底层资源的输入流:

Properties build = new Properties();
build.load(ClassLoader.getSystemResourceAsStream(ANT_BUILD));

加载属性后是否需要显式关闭流?

快速查看java.util.Properties并且它不会关闭流!

2 个答案:

答案 0 :(得分:2)

指定的流在load方法返回后仍保持打开状态,因此您有责任关闭该流。您需要明确关闭流。

答案 1 :(得分:1)

默认ClassLoader.getSystemResourceAsStream(String)会将FileInputStream包含在BufferedInputStream中。

如果您查看FileInputStream sources,您会看到它有finalize方法可以为您关闭流。

但是当然等待堆增长直到垃圾收集器开始处理你的流并不是一个好习惯,你应该总是尝试自己关闭流。