हाय सब मैं समझता हूं कि अगर हम InputStream से बाइट्स पढ़ते हैं और हमने सभी बाइट्स पढ़ना समाप्त कर दिया है (या हम स्ट्रीम के अंत तक पढ़ने का इरादा नहीं रखते हैं), तो हमें धारा से जुड़े सिस्टम संसाधनों को रिलीज़ करने के लिए close() पर कॉल करना होगा।क्या स्ट्रीम स्वचालित रूप से त्रुटि पर बंद हैं?
अब मैं सोच रहा था कि अगर मैं read बाइट्स और यह एक java.io.IOException फेंकता है, मैं अभी भी धारा के साथ जुड़े सिस्टम संसाधन जारी करने के लिए close() फोन करने के लिए आवश्यक कर रहा हूँ?
या यह सच है कि त्रुटियों पर, स्ट्रीम स्वचालित रूप से बंद हो जाती हैं इसलिए हमें close() पर कॉल करने की आवश्यकता नहीं है?
संसाधन जब GCed बंद हो जाती हैं। तो आपको एक ऐसी समस्या हो सकती है जो शायद ही कभी अपवाद कार्य को ठीक करे। निर्धारिती संसाधन प्रबंधन के लिए, बंद() हमेशा कहा जाना चाहिए। –
@ पीटर Lawrey क्या आप कह रहे हैं कि यह ** है क्योंकि ** जीसी चुपचाप 'बंद() 'द्वारा फेंक दिया IOException खाती है कि हमें' करीबी() 'स्वयं को कॉल करना चाहिए? तो अगर (hypothetically) बंद इंटरफ़ेस का इंटरफ़ेस किसी भी प्रकार का अपवाद नहीं फेंकता है, तो हमें स्ट्रीम में त्रुटि होने पर बंद() को कॉल करने की आवश्यकता नहीं है? – Pacerier
यह विचार करने के लिए कुछ है, हालांकि निकट() द्वारा फेंक दिए गए किसी अपवाद को अनदेखा करने के लिए इसकी सुंदर सामान्य प्रथा है। जीसी को देने के साथ समस्या यह है कि आप इन संसाधनों को साफ करने वाले जीसी को ट्रिगर करने से पहले हमारे फाइल हैंडल चला सकते हैं। आपका प्रोग्राम काम पर दिखाई दे सकता है, लेकिन कभी-कभी असफल हो जाता है जो आप बचाना चाहते हैं। –