[英]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.