繁体   English   中英

我是否需要手动关闭输入流?

[英]Do I need to close Input Stream manually?

我正在使用Xerces库来解析XML。 以下是用于解析的代码段:

Document doc = builder.parse(new InputSource(new StringReader(someXMLString)));

我是否需要手动关闭InputSourceInputStream或者parse方法是否会处理它?

鉴于你没有外部资源 - 只是一个StringReader - 你不需要关闭它。 无论如何我会这样做...然后如果你改变代码使用不同的输入,你不会意外地有资源泄漏。

(对于一次性代码,我会离开它 - 但请注意,如果你不小心,一次性代码有一个比预期更长寿的习惯。)

似乎DocumentBuilder API中没有关于它的内容。 我们可以测试它

InputStream is = new FileInputStream("test.xml") {
    @Override
    public void close() throws IOException {
        System.out.println("close");
        super.close();
    }
};
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
documentBuilder.parse(is);

它打印得很close 但由于API中没有任何内容,因此无法保证此行为。

你应该自己关闭它。

builder.parse方法不会在其实现中关闭流。 它不知道何时适合关闭流,因此这需要手动关闭流。

如果您使用try-with,那么您可以让java为您关闭它。 否则我建议手动关闭它。

应该关闭InputStream ,因为close()方法:

关闭此输入流并释放与该流关联的所有系统资源。

你的流是否使用资源并不重要 - 这是关闭它的好方法 只是要确定。

InputSource只是流上的一个方便的类包装器,因此它不会关闭其中的流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM