Angenommen, wir haben ein Codeblock wie folgt aus:-Stream lesen Problem
//Assuming s is a stream:
byte[] data = new byte[1000];
s.Read(data,0,data.Length);
die Read-Methode überall 1-1000 Bytes lesen konnte, ungelesen die Balance des Stroms zu verlassen.
Dies ist, was ein C# Buch sagt.
Ich verstehe nicht, warum Read
Methode würde irgendwo aus dem Stream lesen? Es liest nicht den gesamten Stream?
Und es sagt die Behelfslösung so sein sollte:
//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);
Dieser Code wird auch durch das Buch als Behelfslösung zur Verfügung gestellt. Was ich versuche zu verstehen, ob die Read-Methode beginnt, bis zum Ende zu lesen und alle Bytes im angegebenen Bereich in Byte-Array zu schreiben. Warum benutzt er die bytesRead
als Startpunkt in s.Read(data,bytesRead,dataLength-bytesRead);
Vielen Dank im Voraus.
Sie meinen, zuerst senden sie die Größe der Daten, die sie senden möchten, und dann senden sie die ganzen Daten als Stücke, anstatt sie als Ganzes zu senden? – Tarik
Normalerweise ja. Angenommen, Sie haben eine 40-MB-Datei auf der Festplatte, die Sie übertragen möchten. Anstatt 40 MB in den Speicher zu laden und sie dann zu übertragen - und damit 40 MB Speicher für eine gewisse Zeit voll zu machen - liest man einfach, sagen wir die ersten 1024 Bytes, überträgt es und fährt mit 1024 Byte-Blöcken fort. Ein Dateiübertragungsprotokoll kann angeben, dass "die ersten zwei Bytes des ersten Pakets ein vorzeichenloses int enthalten, das die Größe der Nutzlast angibt", sodass Sie wissen, wann Sie aus diesem Stream lesen können. Das empfangende Ende kann dasselbe tun - es in 1024 Bytes oder eine andere ressourcenfreundliche Puffernummer zerstückeln. – cfeduke