Supongamos que tenemos un bloque de código como este:de corriente leídos Problema
//Assuming s is a stream:
byte[] data = new byte[1000];
s.Read(data,0,data.Length);
el método Read podía leer en cualquier lugar de 1 a 1000 bytes, quedando el saldo de la corriente sin leer.
Esto es lo que dice un libro de C#.
No entiendo, ¿por qué Read
método leería en cualquier lugar de la secuencia? No está leyendo toda la secuencia?
Y se dice que el trabajo en torno debe ser como este:
//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);
Este código también es proporcionada por el libro como una solución temporal. Lo que trato de entender es si el método Read está comenzando a leerse hasta el final y escribir todos los bytes en el rango especificado en byte array. ¿Por qué está utilizando el bytesRead
como punto de partida en s.Read(data,bytesRead,dataLength-bytesRead);
Gracias de antemano.
¿Quiere decir que primero envían el tamaño de los datos que desean enviar y luego envían los datos completos como fragmentos en lugar de enviarlos como un todo? – Tarik
Normalmente sí. Supongamos que tiene un archivo de 40 MB en el disco que desea transferir. En lugar de cargar 40 MB en la memoria y luego transferirlo, lo que hace que 40 MB de memoria se acumulen durante un tiempo, simplemente lee, digamos los primeros 1024 bytes, transfiérala y continúe en fragmentos de 1024 bytes. Un protocolo de transferencia de archivos puede indicar que "los primeros dos bytes del primer paquete contienen un int sin signo que indica el tamaño de la carga útil" para que sepa cuándo dejar de leer ese flujo. El extremo receptor puede hacer lo mismo, dividirlo en 1024 bytes o algún otro número de buffer amigable con los recursos. – cfeduke