我正在使用 Xerces 库来解析 XML。下面是解析的代码片段:
文档 doc = builder.parse(new InputSource(new StringReader(someXMLString)));
我是否需要手动关闭或该方法会InputStream
处理它?InputSource
parse
我正在使用 Xerces 库来解析 XML。下面是解析的代码片段:
文档 doc = builder.parse(new InputSource(new StringReader(someXMLString)));
我是否需要手动关闭或该方法会InputStream
处理它?InputSource
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
只是流上的一个方便的类包装器,因此它不会关闭其中的流。