2013-05-11 54 views
8

根據StAX XMLEventReader,XMLEventWriter,XMLStreamReader,XMLStreamWriter API close()方法不會關閉uderlying資源。因此,此代碼爲什麼StAX讀者和作者不關閉底層輸入源?

XMLInputFactory xf = XMLInputFactory.newInstance(); 
XMLStreamReader xr = xf.createXMLStreamReader(new FileInputStream("1.xml")); 
... 
xr.close(); 

看起來安全乍一看導致資源泄漏。

有沒有人知道一個用例,當不關閉底層資源可能會有用?

+0

因爲這是他們設計的方式。不建設性。 – EJP 2013-05-11 07:52:06

+0

相關問題:http://stackoverflow.com/questions/38634442/why-do-stax-readers-and-writers-not-implement-closeable – Roland 2016-07-28 11:02:19

回答

9

想到的是基於套接字的通信,其中發送和接收多個XML文檔,關閉底層流將關閉套接字。

+0

這聽起來很合理。我剛開始深入研究XMLStreamReader和XMLInputFactory實現,它看起來好像「close」是可怕的錯誤名稱;它更像是一個「重置」,如果設置了(非默認)配置標誌,允許工廠在隨後的創建調用中重用該實例。 還要注意,某些實現會關閉底層資源 - http://bugs.java.com/view_bug.do?bug_id=6539065。我傾向於不打電話關閉這些東西。 – mrec 2015-04-27 14:44:02

+0

@mrec不幸的是,正如那個bug演示的那樣,「某些實現」會調用'close()',無論你喜不喜歡。 – biziclop 2016-09-07 15:44:50