2009-06-02 7 views
5

स्ट्रिंग रीडर का उपयोग करके निम्नलिखित कोड में स्ट्रिंग रीडर के चारों ओर एक BufferedReader का उपयोग करने के बीच क्या अंतर है? दोनों उदाहरणों के लाइन 2 में डोम लोड करके, ऐसा लगता है जैसे BufferedReader आवश्यक नहीं है?इस मामले में BufferedReader का उपयोग क्यों करें?

InputSource is = new InputSource(new StringReader(html)); 
    Document dom = XMLResource.load(is).getDocument(); 

वी.एस.

InputSource is = new InputSource(new BufferedReader(new StringReader(html))); 
    Document dom = XMLResource.load(is).getDocument(); 
+0

बुफर्ड रीडर का उपयोग करना वास्तव में मामूली धीमा होगा (और कोड को और अधिक जटिल बना देगा) –

उत्तर

18

इस विशेष मामले में, मैं कोई लाभ नहीं देख के रूप में है।

  • ओह-तो-काम readLine() विधि केवल बजाय Reader (अप्रासंगिक यहाँ)
  • BufferedReader आईओ कम कर देता है जहां अंतर्निहित पाठक के लिए अलग-अलग कॉल संभावित महंगे हैं BufferedReader में परिभाषित किया गया है (: सामान्य में दो लाभ देखते हैं यानी कम चंकी कॉल बहुत कम लोगों की तुलना में तेज़ हैं) - फिर से, StringReader

कट और पेस्ट असफल?

1

BufferedReader संस्करण कुछ कोड है कि एक FileReader से पढ़ने के लिए प्रयोग किया जाता से नकल किया गया था?

4

संपादित करें: नीचे मेरा मूल उत्तर। नीचे दिए गए इस मामले में प्रासंगिक नहीं हैं, क्योंकि buffered पाठक एक स्ट्रिंगरडर लपेट रहा है, जो स्ट्रिंग को लपेटता है। तो प्रदर्शन करने के लिए कोई बफरिंग नहीं है, और BufferedReader अनावश्यक प्रतीत होता है। आप सर्वोत्तम/सतत प्रथाओं का उपयोग करने के लिए तर्क दे सकते हैं, लेकिन यह बहुत कमजोर होगा।

संभवतः एक प्रतिलिपि/पेस्ट का परिणाम, या शायद एक आईडीई संचालित रिएक्टर बहुत परिणाम!

BufferedReader अधिक इष्टतम फैशन में पढ़ने का प्रयास करेगा।

यही है, यह डेटा के बड़े हिस्से को एक बार (कॉन्फ़िगर करने योग्य राशि में) पढ़ेगा, और फिर आवश्यकतानुसार उपलब्ध कराएगा। इससे कुछ मेमोरी उपयोग की कीमत पर डिस्क (आदि) से पढ़ने की संख्या कम हो जाएगी।

जावाडोक से उद्धृत करने के लिए:

सामान्य तौर पर, प्रत्येक पढ़ से बना अनुरोध एक रीडर एक इसी पढ़ अनुरोध अंतर्निहित चरित्र या बाइट धारा के किए जाने के लिए कारण बनता है। यह इसलिए उचित किसी भी रीडर जिसका पढ़ने के चारों ओर एक BufferedReader रैप करने के लिए() के संचालन महंगा हो सकता है, इस तरह के FileReaders और InputStreamReaders

+0

और यह स्ट्रिंग रीडर के लिए बिल्कुल सही है? ;) –

+0

हां। मैं आपकी बात मानता हूँ। मैंने जवाब दिया कि बहुत तेज़ :-) –