आपको भ्रमित नहीं करना चाहिए कि इनपुटस्ट्रीम का डिफ़ॉल्ट व्यवहार क्या है और इसके अधिकांश उप-वर्ग क्या करते हैं। ओओ डिजाइन का एक सिद्धांत यह है कि उप-वर्ग उस कार्यान्वयन के लिए एक विधि के व्यवहार को बदल सकते हैं।
इनपुटस्ट्रीम से - पढ़ें (बाइट []) कॉल बार-बार पढ़ते हैं।
public int read(byte b[], int off, int len) throws IOException {
// code removed
for (; i < len ; i++) {
c = read();
// code removed
}
BufferedInputStream से - पढ़ें (बाइट []) पढ़ा नहीं जाता है()।
public synchronized int read(byte b[], int off, int len) throws IOException {
// code removed
int nread = read1(b, off + n, len - n);
// code removed
}
private int read1(byte[] b, int off, int len) throws IOException {
// code removed
return getInIfOpen().read(b, off, len);
// code removed
}
FileInputStream से - पढ़ें (बाइट []) को पढ़ने के फोन नहीं करता है()।
public int read(byte b[], int off, int len) throws IOException {
return readBytes(b, off, len);
}
private native int readBytes(byte b[], int off, int len) throws IOException;
InputStream अंतर्निहित धारा में एक ही विधि के लिए एक समय में एक बाइट, लगभग सभी कार्यान्वयन पढ़ पारित करेंगे (बाइट []) पढ़ा जाएगा।
नोट: पढ़ने के लिए कार्यान्वयन (बाइट [], int, int) तीनों मामलों में अलग हैं।
मेरा मतलब अधिक स्पष्ट रूप से पूछना है: मान लीजिए कि मैं 20 बाइट्स पढ़ना चाहता हूं, एक बार में एक बाइट पढ़ना लूप में हर बार अंतर्निहित धारा (जैसे फ़ाइल सिस्टम) को मार देगा जिसका मतलब 20 गुना है .. ठीक है अब एक बार में 20 बाइट्स की सरणी पढ़ना, यानी पढ़ना (बाइट [] 20) का उपयोग करना, अब वह अंतर्निहित धारा (जैसे फाइल सिस्टम) को एक बार या 20 बार मारा जाएगा .. ?? (जैसा कि यह दिया गया है: पढ़ें (बाइट [] बी) विधि विधि को पढ़ने के लिए भी जा रही है() बार-बार 20 बार) ??
चाहे आप BufferedInputStream या FileInputStream का उपयोग करते हैं, एक पढ़ा (बाइट []) परिणाम बाइट [] में पढ़ने के लिए लगभग एक सिस्टम कॉल में परिणाम देता है।
पीटरलावरी: उस अच्छी तरह से विशिष्ट स्पष्टीकरण के लिए धन्यवाद .. तो क्या इसका मतलब है कि इनपुटस्ट्रीम के सभी 3 तरीकों को एक समय में लगभग एक बाइट पढ़ा जाएगा, भले ही हम पढ़े गए बाइट्स की संख्या के बावजूद (बाइट []) ?? –
नहीं, मैं लंबाई और विस्तार से प्रदर्शित करने की कोशिश कर रहा हूं कि ऐसा क्यों नहीं है। यह मुझे स्पष्ट नहीं है कि आप क्यों मान सकते हैं कि यह मामला हो सकता है। –
धन्यवाद .. अब मुझे यह मिला है .. –