आपको वास्तव में ऐसा करने की आवश्यकता नहीं है।
अंगूठे नियम: यदि आपने new SomeOutputStream()
का उपयोग करके इसे स्वयं नहीं बनाया/खोल दिया है, तो आपको इसे स्वयं बंद करने की आवश्यकता नहीं है। यदि यह उदाहरण के लिए new FileOutputStream("c:/foo.txt")
था, तो आपको स्पष्ट रूप से इसे स्वयं बंद करने की आवश्यकता है।
कारण कुछ लोग अभी भी ऐसा करते हैं सुनिश्चित करें कि प्रतिक्रिया शरीर को और कुछ भी नहीं लिखा जाएगा। यदि यह कभी होता है, तो यह ऐप्सरवर लॉग में IllegalStateException
का कारण बनता है, लेकिन इससे क्लाइंट को प्रभावित नहीं होगा, इसलिए ग्राहक को अभी भी उचित प्रतिक्रिया मिलती है। अनुरोध-प्रतिक्रिया श्रृंखला में संभावित समस्याओं को जानने के लिए यह एक आसान डीबग भी है जिसे आप पहली नज़र में नहीं देख पाएंगे। उदाहरण के लिए, चेन में कहीं और प्रतिक्रिया प्रतिक्रिया शरीर को और अधिक डेटा जोड़ना है।
स्टार्टर्स के बीच आप जो अन्य कारण देखते हैं वह यह है कि वे को रोकना चाहते हैं कि प्रतिक्रिया डेटा पर अधिक डेटा लिखा गया है। आप अक्सर यह देखते हैं जब जेएसपी प्रतिक्रिया में गलत भूमिका निभाता है। वे लॉग में IllegalStateException
एस को अनदेखा करते हैं। कहने की जरूरत नहीं है कि यह विशेष उद्देश्य खराब है।
यदि आप इसे लपेटने के लिए एक और इनपुटस्ट्रीम खोल चुके हैं तो आप स्ट्रीम को बंद करना चाह सकते हैं क्योंकि कंटेनर में रैपिंग स्ट्रीम की दृश्यता नहीं होगी, जिसमें असामान्य बाइट्स हो सकते हैं। आदर्श रूप से आप केवल बुफर्ड स्ट्रीम को स्ट्रीम करते हैं, अगर यह BufferedOutputStream की तरह कुछ है, लेकिन मुझे पता चला कि CipherOutputStream का उपयोग करते समय यह वर्ग पूरी तरह से डेटा नहीं लिखता है (मुझे इस मामले में अच्छे कारण के साथ विश्वास है)। इस स्थिति में ग्राहक को सही प्रतिक्रिया प्राप्त करने के लिए क्लोज़() को कॉल करना आवश्यक था। –