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

时间:2012-12-25 08:27:42

标签: java xml xml-parsing xerces

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

  

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

我是否需要手动关闭InputStream InputSourceparse方法处理它?<​​/ p>

6 个答案:

答案 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只是流上的方便的类包装器,因此它不会在其中关闭流。

相关问题