मान लीजिए हम इस तरह एक कोड ब्लॉक:स्ट्रीम पढ़ें समस्या
//Assuming s is a stream:
byte[] data = new byte[1000];
s.Read(data,0,data.Length);
पढ़ विधि 1 से 1000 बाइट्स से कहीं भी पढ़ सकता है, धारा अपठित के संतुलन हो जाता है।
यह सी # पुस्तक कहता है।
मुझे समझ में नहीं आता है, क्यों Read
विधि स्ट्रीम से कहीं भी पढ़ी जाएगी? यह सभी धाराओं को पढ़ नहीं रहा है?
और यह कहते हैं काम के आसपास इस तरह होना चाहिए:
//bytesRead will always end up at 1000, unless the stream is itself smaller in length:
int bytesRead = 0;
int chunkSize = 1;
while(bytesRead < data.Length && chunkSize > 0)
bytesRead += chunkSize = s.Read(data,bytesRead,dataLength-bytesRead);
ऊपर इस कोड के रूप में भी एक काम के आसपास पुस्तक द्वारा प्रदान की जाती है। मैं यह समझने की कोशिश कर रहा हूं कि रीड विधि अंत में पढ़ने शुरू हो रही है और बाइट सरणी में निर्दिष्ट सीमा में सभी बाइट्स लिखना शुरू कर रहा है या नहीं। वह का उपयोग s.Read(data,bytesRead,dataLength-bytesRead);
में प्रारंभ बिंदु के रूप में क्यों कर रहा है।
आपका मतलब है, सबसे पहले वे उस डेटा का आकार भेजते हैं जिसे वे भेजना चाहते हैं और फिर वे पूरे डेटा को पूरी तरह भेजने के बजाए भाग के रूप में भेजते हैं? – Tarik
आमतौर पर हाँ। मान लें कि आपके पास डिस्क पर 40 एमबी फ़ाइल है जिसे आप ट्रांसफर करना चाहते हैं। मेमोरी में 40 एमबी लोड करने के बजाय इसे स्थानांतरित करने के बजाय - और इस प्रकार 40 एमबी मेमोरी को लंबे समय तक भीड़ में डाल दिया जाता है - आप बस पढ़ते हैं, पहले 1024 बाइट्स कहें, इसे स्थानांतरित करें, और 1024 बाइट भागों में जारी रखें। एक फ़ाइल ट्रांसफर प्रोटोकॉल "पहले पैकेट के पहले दो बाइट्स में एक अनगिनत int शामिल है जो पेलोड के आकार को इंगित करता है" ताकि आप जान सकें कि उस स्ट्रीम से पढ़ने को कब रोकना है। प्राप्त करने वाला अंत ऐसा ही कर सकता है - इसे 1024 बाइट्स या कुछ अन्य संसाधन अनुकूल बफर नंबर में घुमाएं। – cfeduke