对ClassLoader.getSystemResourceAsStream的调用会打开最终转换为属性的底层资源的输入流:
Properties build = new Properties();
build.load(ClassLoader.getSystemResourceAsStream(ANT_BUILD));
加载属性后是否需要显式关闭流?
快速查看java.util.Properties
并且它不会关闭流!
答案 0 :(得分:2)
指定的流在load
方法返回后仍保持打开状态,因此您有责任关闭该流。您需要明确关闭流。
答案 1 :(得分:1)
默认ClassLoader.getSystemResourceAsStream(String)
会将FileInputStream
包含在BufferedInputStream
中。
如果您查看FileInputStream sources,您会看到它有finalize
方法可以为您关闭流。
但是当然等待堆增长直到垃圾收集器开始处理你的流并不是一个好习惯,你应该总是尝试自己关闭流。