मैं की तरह कुछ करना कहते हैं:जावा: Reader.close() किसी भी जंजीर पाठकों को बंद करता है?
Reader r = new BufferedReader(new FileReader(file));
... read ...
r.close()
इस पास अंतर्निहित FileReader (और जारी खुली हुई फ़ाइल हैंडल) करता है?
-डेव
मैं की तरह कुछ करना कहते हैं:जावा: Reader.close() किसी भी जंजीर पाठकों को बंद करता है?
Reader r = new BufferedReader(new FileReader(file));
... read ...
r.close()
इस पास अंतर्निहित FileReader (और जारी खुली हुई फ़ाइल हैंडल) करता है?
-डेव
हाँ, सबसे बाहरी Reader
पर close
बुला पर्याप्त होने जा रहा है
Sun Developer Network पर Java I/O Streams लेख श्रृंखलन स्ट्रीम पर एक अनुभाग जो निम्नलिखित का कहना है:।
FileOutputStream fos = new FileOutputStream("myfile.out"); CryptOutputStream cos = new CryptOutputStream(fos); GZIPOutputStream gos = new GZIPOutputStream(cos);
[...]
[...] जब बंद करने श्रृंखलित स्ट्रीम, आपको केवल बाहरी स्ट्रीम स्ट्रीम को बंद करने की आवश्यकता है क्योंकि
close()
कॉल सभी शापित वर्गों के माध्यम से स्वचालित रूप से ट्रिक हो जाती है; में उपरोक्त उदाहरण, आप विधिGZIPOutputStream
कक्षा पर कॉल करेंगे।
इसलिए, इस मामले में, एक ही BufferedReader
पर close
फोन करना होगा।
dtsazza already mentioned के रूप में, Java API SpecificationBufferedReader
वर्ग के लिए कहते हैं BufferedReader.close
विधि किसी भी अंतर्निहित संसाधनों मुक्त होगा कि:
धारा और विज्ञप्ति किसी भी प्रणाली के साथ जुड़े संसाधनों बंद करता है। [...]
तो, कोई भी अंतर्निहित Reader
एस का अनुमान लगा सकता है, भले ही यह स्पष्ट रूप से ऐसा न कहें।
सच (मॉड्यूलो [बग] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6266377)) लेकिन विचार करें: http://stackoverflow.com/a/3629116/281545। तो अगर आपके उदाहरण में 'CryptOutputStream' ने' IOException 'फेंक दिया है तो क्या कॉलर को' fos' बंद करना चाहिए? –
हां। ऐसा होता है। सॉकेट के लिए इसका इस्तेमाल करते समय मुझे यह पता चला।
मूल रूप से आप इसे बंद नहीं कर सकते जब तक आप माता पिता के साथ किया जाता है। सॉकेट के मामले में यह वास्तव में आपकी सॉकेट बंद कर देगा। :-(
the documentation के अनुसार, यह केवल "पाठक] से जुड़े किसी भी सिस्टम संसाधन को जारी करता है"। चाहे कोई रीडर किसी नेस्टेड पाठकों को बंद कर देता है, वह विशिष्ट वर्ग के कार्यान्वयन का विषय है।
आपके द्वारा उल्लिखित विशिष्ट उदाहरण में - हाँ, BufferedReader
हमेशा घोंसला वाले पाठक को बंद कर देगा। लेकिन जब इस आमतौर पर होता है, इसका यह मतलब नहीं है कि सभी नेस्टेड पाठक किसी प्रकार का है कि Reader
इंटरफ़ेस के कार्यान्वयन उन्हें के माध्यम से एक close()
कॉल का प्रचार करेंगे - आप उस विशिष्ट के प्रलेखन जांच करने की आवश्यकता होगी पता लगाने के लिए कक्षा।
हां, यह सजावटी पैटर्न है।
बेशक अगर 'बुफर्ड रीडर' कन्स्ट्रक्टर फेंकता है, तो आप अंतर्निहित 'फ़ाइल रीडर' को बंद करने में सक्षम नहीं होंगे (जिसे आप किसी भी तरह से वर्णमाला निर्दिष्ट नहीं कर सकते हैं, इसलिए थोड़ा निराशाजनक है)। –