簡體   English   中英

我是否需要手動關閉輸入流?

[英]Do I need to close Input Stream manually?

我正在使用Xerces庫來解析XML。 以下是用於解析的代碼段:

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

我是否需要手動關閉InputSourceInputStream或者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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM