2012-12-25 52 views
5

我正在使用Xerces库来解析XML。这里是解析的代码片段:我是否需要手动关闭输入流?

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

我需要手动关闭InputSourceInputStream或将parse方法处理呢?

回答

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没有任何关于它的内容,所以不能保证这种行为。

0

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

+0

请注意,您需要在'StringReader'上做到这一点,因为'InputSource'不是'AutoCloseable' –

0
InputStream

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

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

这不要紧,就是你的流使用的资源或不 - 这是关闭它好办法。只是要确定。

6

鉴于您没有外部资源 - 只需一个StringReader - 您不需要需要来关闭它。无论如何,我会这样做,但是,如果您更改了代码以使用其他输入,则不会意外地发生资源泄漏。

(对于刚刚一次性的代码,我会离开它 - 但要注意,如果你不小心,一次性的代码有生活的时间比预期的习惯)

0

InputSource只是方便类包装上流,所以它不会关闭它内的流。

1

你应该自己关闭它。

builder.parse方法在其实现中不关闭流。它不知道什么时候适合关闭流,所以这需要手动关闭流。

相关问题