2010-10-19 16 views
5

मेरे पास एक कक्षा है जो इनपुट के रूप में स्ट्रीम (कन्स्ट्रक्टर में) स्वीकार करती है। यह विभिन्न तरीकों के माध्यम से इस धारा से सामग्री की सतह बनाता है।मैं स्ट्रीम रीडर या स्ट्रीम लेखक से स्ट्रीम कैसे अलग कर सकता हूं?

हालांकि, मैं नहीं चाहता कि मेरी वस्तु धारा को बंद करने के लिए ज़िम्मेदार हो - यह कॉलर की ज़िम्मेदारी होनी चाहिए। इसलिए मुझे अपनी कक्षा के अंदर अपने StreamReader को बंद करने की आवश्यकता है, लेकिन मैं अंतर्निहित धारा को बंद नहीं कर सकता।

क्या यह संभव है?

+0

आपको StreamReader को बंद करने की आवश्यकता क्यों है? –

+0

@ मार्टिन्हो: मेरी समझ के कारण यह है कि आपको क्या करना है। –

उत्तर

3

StreamReader एस अंतर्निहित धारा के पूर्ण और एकमात्र स्वामित्व लेने के लिए डिज़ाइन किए गए हैं।

विशेष रूप से, StreamReader एक आंतरिक बफर भरने के लिए स्ट्रीम में मनमाने ढंग से आगे पढ़ेगा। (यह मुझे एक बार थोड़ा सा)

यदि आपको स्ट्रीम साझा करने की आवश्यकता है, तो आपको शायद StreamReader का उपयोग नहीं करना चाहिए।

+0

@SLacks: आम तौर पर, मैं स्ट्रीमreader को बिल्कुल साझा नहीं करता हूं। मुझे केवल एक ही जगह की आवश्यकता है जो यूनिट परीक्षण के लिए एक माउंट प्वाइंट का प्रतिनिधित्व करने वाली कक्षा है। –

4

स्ट्रीमर बंद करने से अंतर्निहित धारा बंद हो जाएगी। उसके आसपास कोई रास्ता नहीं है। हालांकि, केवल कारण है कि आपको स्ट्रीम स्ट्रीमर बंद करने की आवश्यकता है ताकि अंतर्निहित धारा भी बंद हो। बाकी सब कुछ प्रबंधित कोड है। इसका मतलब है कि आप बस अपने स्ट्रीमर को छोड़ सकते हैं और सबकुछ ठीक होना चाहिए — यह मानते हुए कि आपका कॉलर अपनी स्ट्रीम को बंद करने के लिए याद रखता है।

+0

मैंने सोचा कि धारा पाठक/लेखक के फाइनलर ने स्ट्रीम बंद कर दिया है ... –

+0

@ बिली: अंतिमकर्ताओं को केवल _native_ संसाधनों का निपटान करना चाहिए। – SLaks

+1

@Slaks: ठीक है मैंने StreamReader क्लास नहीं लिखा .... –

संबंधित मुद्दे