我正在使用Xerces库来解析XML。以下是用于解析的代码片段:
Document doc = builder.parse(new InputSource(new StringReader(someXMLString)));
我是否需要手动关闭InputStream
InputSource
或parse
方法处理它?</ p>
答案 0 :(得分:6)
鉴于您没有外部资源 - 仅StringReader
- 您不需要 来关闭它。无论如何我会这样做......那么如果你改变代码使用不同的输入,你就不会意外地有资源泄漏。
(对于一次性代码,我会离开它 - 但请注意,如果你不小心,一次性代码有一个比预期更长寿的习惯。)
答案 1 :(得分:2)
似乎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中没有任何内容,因此无法保证此行为。
答案 2 :(得分:1)
你应该自己关闭它。
builder.parse方法不会在其实现中关闭流。它不知道何时适合关闭流,因此需要手动关闭流。
答案 3 :(得分:0)
如果您使用try-with,那么您可以让java为您关闭它。否则我建议手动关闭它。
答案 4 :(得分:0)
InputStream
应该关闭,因为close()
方法:
关闭此输入流并释放与该流关联的所有系统资源。
您的信息流是否使用资源并不重要 - 关闭它是好方法。只是为了确定。
答案 5 :(得分:0)
InputSource
只是流上的方便的类包装器,因此它不会在其中关闭流。