我正在使用Xerces库来解析XML。这里是解析的代码片段:我是否需要手动关闭输入流?
Document doc = builder.parse(new InputSource(new StringReader(someXMLString)));
我需要手动关闭InputSource
的InputStream
或将parse
方法处理呢?
我正在使用Xerces库来解析XML。这里是解析的代码片段:我是否需要手动关闭输入流?
Document doc = builder.parse(new InputSource(new StringReader(someXMLString)));
我需要手动关闭InputSource
的InputStream
或将parse
方法处理呢?
似乎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没有任何关于它的内容,所以不能保证这种行为。
如果您使用try-with,那么您可以让java为您关闭它。否则,我会建议手动关闭它。
InputStream
应该被关闭,因为close()
方法:
关闭此输入流并释放与该流相关联的所有系统资源。
这不要紧,就是你的流使用的资源或不 - 这是关闭它好办法。只是要确定。
鉴于您没有外部资源 - 只需一个StringReader
- 您不需要需要来关闭它。无论如何,我会这样做,但是,如果您更改了代码以使用其他输入,则不会意外地发生资源泄漏。
(对于刚刚一次性的代码,我会离开它 - 但要注意,如果你不小心,一次性的代码有生活的时间比预期的习惯)
InputSource
只是方便类包装上流,所以它不会关闭它内的流。
你应该自己关闭它。
builder.parse方法在其实现中不关闭流。它不知道什么时候适合关闭流,所以这需要手动关闭流。
请注意,您需要在'StringReader'上做到这一点,因为'InputSource'不是'AutoCloseable' –