2012-12-25 35 views
5

मैं एक्सएमएल पार्सिंग के लिए ज़ीरिस लाइब्रेरी का उपयोग कर रहा हूं। पार्सिंग के लिए कोड स्निपेट यहां दिया गया है:क्या मुझे इनपुट स्ट्रीम को मैन्युअल रूप से बंद करने की आवश्यकता है?

दस्तावेज़ दस्तावेज़ = builder.parse (नया इनपुट स्रोत (नया स्ट्रिंग रीडर (someXMLString));

मैं parse विधि यह संभाल लेंगे मैन्युअल InputSource में InputStream बंद करने के लिए की जरूरत है या है?

उत्तर

2

ऐसा लगता है कि इसके बारे में 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। लेकिन चूंकि एपीआई में इसके बारे में कुछ भी नहीं है, इसलिए इस व्यवहार की गारंटी नहीं है।

0

यदि आप कोशिश करते हैं तो आप जावा को अपने लिए बंद कर सकते हैं। अन्यथा मैं इसे मैन्युअल रूप से बंद करने की अनुशंसा करता हूं।

+0

ध्यान दें कि आपको 'स्ट्रिंग रीडर' पर 'इनपुट स्रोत' के रूप में ऐसा करने की आवश्यकता है 'ऑटोक्लोसेबल' नहीं है –

0

InputStream चाहिए, को बंद करना पड़ा close() विधि के बाद से:

इस इनपुट स्ट्रीम और रिलीज के किसी भी प्रणाली धारा के साथ जुड़े संसाधनों बंद करता है।

यह कोई फर्क नहीं पड़ता है अपनी स्ट्रीम संसाधन या नहीं का उपयोग करता है - यह अच्छा तरीका इसे बंद करना है। बस तसल्ली के लिए।

6

यह देखते हुए कि आपके पास कोई बाहरी संसाधन नहीं है - केवल StringReader - आपको को को बंद करने की आवश्यकता नहीं है। मैं वैसे भी ऐसा करूंगा ... फिर यदि आप कभी भी एक अलग इनपुट का उपयोग करने के लिए कोड बदलते हैं, तो आप गलती से संसाधन रिसाव नहीं करेंगे।

(बस throwaway कोड के लिए, मैं इसे छोड़ देंगे -। लेकिन यह है कि अगर आप सावधान नहीं कर रहे हैं, throwaway कोड अपेक्षा से अधिक समय रहने की एक आदत है बारे में पता होना)

0

InputSource पर सिर्फ सुविधाजनक वर्ग आवरण है स्ट्रीम, तो यह इसके भीतर धारा बंद नहीं करता है।

1

आपको इसे अपने आप बंद करना चाहिए।

बिल्डर.परसे विधि इसके क्रियान्वयन में धारा को बंद नहीं करती है। यह नहीं पता होगा कि स्ट्रीम को बंद करने के लिए उपयुक्त कब है, इसलिए इसे स्ट्रीम को मैन्युअल रूप से बंद करने की आवश्यकता है।