2009-07-20 19 views
8

एक विधि में इस टिप्पणी को देखा है:क्यों इनपुटस्ट्रीम और आउटपुटस्ट्रीम लागू करने योग्य और सॉकेट लागू नहीं करता है?

//I wonder why Sun made input and output streams implement Closeable and left Socket behind 

यह आवरण गुमनाम आंतरिक वर्ग जो closeable लागू करता है के निर्माण रोका जा सके जो प्रतिनिधियों सॉकेट का एक उदाहरण के लिए अपने पास विधि।

+1

क्यों न सिर्फ प्रश्न पूछें? इसके बजाय आप एक टिप्पणी उद्धृत करते हैं और टिप्पणी में वह प्रश्न होता है जो पढ़ने के लिए कठिन होता है। – Buttons840

+0

@ Buttons840 मुझे लगता है कि सवाल शीर्षक में स्पष्ट रूप से सामने आया है। शरीर में एक विवरण है। –

उत्तर

8

बंद करने योग्य जावा 5 में पेश किया गया था जबकि सॉकेट जेडीके 1.0 में पेश किया गया था। Java7 Socket will be Closeable में।

संपादित

आप बस किसी करीबी विधि की उपस्थिति के परीक्षण से जावा 4/5/6 में किसी भी "closeable" वस्तु को बंद करने के क्रम में प्रतिबिंब का उपयोग कर सकते हैं। इस तकनीक का उपयोग करने से आप एक परिणामसेट (कहां बंद कर सकते हैं) बंद कर सकते हैं, लेकिन बंद करने योग्य लागू नहीं करता है):

public static universalClose(Object o) { 
    try { 
     o.getClass().getMethod("close", null).invoke(o, null); 
    } catch (Exception e) { 
     throw new IllegalArgumentException("missing close() method"); 
    } 
} 
+0

तो क्या आपका मतलब है, सूर्य बस सॉकेट भूल गया, क्योंकि उन्होंने क्लोजेबल पेश किया? – Mnementh

+1

यह कहना मुश्किल है ... परिणामस्वरूप एक करीबी() विधि भी है लेकिन यह बंद करने योग्य नहीं है – dfa

+0

जेडीबीसी कक्षाएं बंद करने योग्य नहीं होनी चाहिए, क्योंकि वे एक अलग अपवाद फेंकते हैं। – maaartinus

0

सार्वजनिक इंटरफ़ेस closeable

एक closeable एक स्रोत या डेटा कि बंद किया जा सकता का स्थल है। करीबी विधि उन संसाधनों को रिलीज़ करने के लिए बुलाया गया है जो ऑब्जेक्ट धारण कर रहे हैं (जैसे फ़ाइलें खोलें)।

मुझे लगता है कि ऐसा इसलिए है क्योंकि सॉकेट स्वयं डेटा का स्रोत या गंतव्य नहीं है, लेकिन वे सॉकेट से जुड़े इनपुटस्ट्रीम/आउटपुटस्ट्रीम हैं।

+0

डाउनवोट क्यों? – akappa

+0

perche 'sei un pisano :) – dfa

+0

मील sembra una ottima motivazione: डी – akappa

0

मुझे पता नहीं है, लेकिन मैं समय वे काफी अच्छा NIO SocketChannel पर होने पर विचार किया पर लगता है ...

इसके अलावा, सॉकेट एक लंबे समय के लिए चारों ओर हो गया है। नया कोड जो इसे सॉकेट.क्लोस() को कॉल करने के बजाए बंद करने योग्य के रूप में संदर्भित करना शुरू कर देता है, वह पिछली संगत नहीं होगा, इसलिए शायद 1.5 के समय (जब वे बंद करने योग्य जोड़े गए हों) तो उन्होंने नहीं सोचा था कि यह इस पर विचार करने के लायक था बहुत से उपयोगकर्ता अभी भी 1.4 के साथ संगत होना चाहते हैं और क्योंकि इसमें कोई अन्य सामान्य इंटरफेस नहीं है, आप शायद ही कभी सॉकेट के अलावा कुछ भी मानते हैं।

मुझे लगता है कि 1.4 के साथ पिछली संगतता आजकल एक समस्या से कम है, जो जावा 7 में क्यों आ रही है।

"अक्कप्पा" में आईएमएचओ अन्य वैध बिंदु है।

+1

लेकिन पीछे की संगतता तर्क इनपुटस्ट्रीम और आउटपुटस्ट्रीम पर भी लागू होता। –

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