Stream to ByteArray

18/02/2010 - 13:17 por jose | Informe spam
buenas!

tengo el siguiente código para convertir un stream a bytearray.
Deseo leer el stream de una sola pasada y eliminar el while.
sin embargo en la linea:

bytesReaded = stream.Read(buffer, 0, Convert.ToInt32(bufferLength));

si buffer length 80000 por ej, bytesReaded solo figura 12000.

por qué es esto?

quiero leer el stream y pasarlo directamente a bytearray, sin while ni nada
por el estilo

gracias


if ( stream.CanSeek && stream.Position != 0 )
{
throw new InvalidOperationException();
}

MemoryStream ms = new MemoryStream();
int bytesReaded;
int offset = 0;
byte[] buffer = new byte[bufferLength];

while ( true )
{
bytesReaded = stream.Read(buffer, 0, Convert.ToInt32(bufferLength));
if ( bytesReaded == 0 )
{
break;
}

ms.Write(buffer, 0, bytesReaded);
offset += bytesReaded;
}

stream.Close();
ms.Flush();
return ms.ToArray();

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
18/02/2010 - 14:17 | Informe spam
"jose" wrote in message
news:
tengo el siguiente código para convertir un stream a bytearray.
Deseo leer el stream de una sola pasada y eliminar el while.
sin embargo en la linea:

bytesReaded = stream.Read(buffer, 0, Convert.ToInt32(bufferLength));

si buffer length 80000 por ej, bytesReaded solo figura 12000.

por qué es esto?



Efectivamente, el "Read" de un Stream no garantiza devolverte todos los
bytes que has pedido. Por ejemplo, si se trata de un NetworkStream que está
leyendo datos a través de la red y no se han recibido suficientes datos, te
puede devolver los que haya hasta el momento. Por eso es absolutamente
obligatorio cuando se lee de un Stream utilizar ese bucle que dices que no
quieres utilizar.

quiero leer el stream y pasarlo directamente a bytearray, sin while ni
nada
por el estilo



Puedes usar un BinaryReader conectado con el Stream. El BinaryReader ya
tiene internamente el bucle, y así no te tienes que molestar en escribirlo.

BinaryReader br = new BinaryReader(stream);
byte[] buffer=br.ReadBytes(longitud);

Nótese que aún así te puede devolver menos bytes de los que has pedido, en
caso de que se alcance el final del Stream.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida