2013-05-11 10 views
8

In base a StAX XMLEventReader, XMLEventWriter, XMLStreamReader, il metodo XMLStreamWriter API close() non chiude la risorsa uderlying. Quindi questo codicePerché i lettori e i writer StAX non chiudono la sorgente di input sottostante?

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

che sembra sicuro a prima vista provoca una perdita di risorse.

Qualcuno conosce un caso d'uso quando non chiude la risorsa sottostante potrebbe essere utile?

+0

Perché è così che l'hanno progettato. Non costruttivo. – EJP

+0

Domanda correlata: http://stackoverflow.com/questions/38634442/why-do-stax-readers-and-writers-not-implement-closeable – Roland

risposta

9

Ciò che viene in mente è la comunicazione basata su socket, in cui vengono inviati e ricevuti diversi documenti XML e chiudendo il flusso sottostante si chiuderà il socket.

+0

Sembra ragionevole. Ho appena scavato nelle implementazioni XMLStreamReader e XMLInputFactory e mi sembra che "close" sia orribilmente erroneamente chiamato; è più di un "reset" che consente alla fabbrica di riutilizzare quell'istanza in una successiva chiamata di creazione se è impostato un flag di configurazione (non predefinito). Si noti inoltre che alcune implementazioni DO chiudono la risorsa sottostante - http://bugs.java.com/view_bug.do?bug_id=6539065. Sono propenso a non chiamare da vicino su queste cose. – mrec

+0

@mrec Sfortunatamente, come questo bug lo dimostra, "alcune implementazioni" chiameranno 'close()' che ti piaccia o no. – biziclop

Problemi correlati