ऊपर टिप्पणी में रॉस Studtman के प्रश्न के उत्तर में (लेकिन यह भी ओ पी के लिए प्रासंगिक):
BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputSream(inputStream), "UTF-8"));
BufferedInputStream
ज़रूरत से ज़्यादा है (और संभावित प्रतिलिपि के कारण प्रदर्शन को नुकसान पहुंचा सकता है)। ऐसा इसलिए है क्योंकि BufferedReader
से InputStreamReader.read(char[], int, int)
पर कॉल करके बड़े हिस्से में InputStreamReader
से वर्णों का अनुरोध करता है, जो बदले में StreamDecoder
के माध्यम से InputStream.read(byte[], int, int)
पर अंतर्निहित InputStream
से बाइट्स के बड़े ब्लॉक को पढ़ने के लिए कॉल करता है।
आप अपने आप को समझा सकते हैं कि यह निम्नलिखित कोड चलाकर तो है:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream("Hello world!".getBytes("UTF-8")) {
@Override
public synchronized int read() {
System.err.println("ByteArrayInputStream.read()");
return super.read();
}
@Override
public synchronized int read(byte[] b, int off, int len) {
System.err.println("ByteArrayInputStream.read(..., " + off + ", " + len + ')');
return super.read(b, off, len);
}
}, "UTF-8") {
@Override
public int read() throws IOException {
System.err.println("InputStreamReader.read()");
return super.read();
}
@Override
public int read(char[] cbuf, int offset, int length) throws IOException {
System.err.println("InputStreamReader.read(..., " + offset + ", " + length + ')');
return super.read(cbuf, offset, length);
}
}).read(); // read one character from the BufferedReader
आप निम्न उत्पादन देखेंगे:
InputStreamReader.read(..., 0, 8192)
ByteArrayInputStream.read(..., 0, 8192)
यह दर्शाता है कि BufferedReader
अनुरोध पात्रों में से एक बड़ी हिस्सा InputStreamReader
से, जो बदले में अंतर्निहित InputStream
से बाइट्स का एक बड़ा हिस्सा अनुरोध करता है।
यदि अंतर्निहित इनपुटस्ट्रीम एक फ़ाइल इनपुटपुट था, तो क्या दो पाठक डिस्क की अलग-अलग मात्रा में पूरी पढ़ाई प्रक्रिया में पढ़ते हैं? – bdkosher
मैंने पेर्फोन का उपयोग करके इसे चेक किया, मुझे ध्यान देने योग्य अंतर दिखाई नहीं दे रहे हैं।मैं बेंचमार्क कोड स्निपेट को शामिल करने के लिए जल्द ही उत्तर अपडेट कर दूंगा। – BalusC
पैकेज नाम के लिए बड़ा बड़ा :) –