![](/img/trans.png)
[英]Do I need to close the input stream manually after using IOUtils.toString(input) of commons-io?
[英]Do I need to close Input Stream manually?
我正在使用Xerces库来解析XML。 以下是用于解析的代码段:
Document doc = builder.parse(new InputSource(new StringReader(someXMLString)));
我是否需要手动关闭InputSource
的InputStream
或者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
只是流上的一个方便的类包装器,因此它不会关闭其中的流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.