2011-01-19 22 views

Respuesta

874

La forma más fácil de convertir una matriz de bytes en una corriente está utilizando la clase MemoryStream:

Stream stream = new MemoryStream(byteArray); 
+17

Tenga en cuenta que esta forma de crear una secuencia quizás no sea ideal: "Este constructor no expone la secuencia subyacente. GetBuffer arroja UnauthorizedAccessException ". http://msdn.microsoft.com/en-us/library/e55f3s5k.aspx – noocyte

+13

@noocito ¿cuál es la forma ideal, entonces? – developerbmw

+4

pero aún puede usar 'stream.ToArray()' si desea recuperar su matriz de bytes. –

260

Estás buscando el MemoryStream.Write method. Por ejemplo, el siguiente código escribirá el contenido de una matriz byte[] en una secuencia de memoria:

byte[] myByteArray = new byte[10]; 
MemoryStream stream = new MemoryStream(); 
stream.Write(myByteArray, 0, myByteArray.Length); 

Alternativamente, usted podría create a new, no puede cambiar de tamaño MemoryStream objeto basado en la matriz de bytes:

byte[] myByteArray = new byte[10]; 
MemoryStream stream = new MemoryStream(myByteArray); 
+19

Esta es la mejor respuesta. Es conciso y cubre todas las aplicaciones prácticas. Hay un problema con solo usar el constructor basado en la matriz de bytes como se indica aquí: la secuencia resultante no es redimensionable. – Jduv

+10

Recuerde también reiniciar el flujo después: stream.Seek (0, SeekOrigin.Begin); –

+0

Tenga en cuenta que la primera opción 'MemoryStream.Write' consume mucha más memoria que' new MemoryStream (myByteArray) ' – Alex

23

El enfoque general para escribir en cualquier corriente (no sólo MemoryStream) es utilizar BinaryWriter:

static void Write(Stream s, Byte[] bytes) 
{ 
    using (var writer = new BinaryWriter(s)) 
    { 
     writer.Write(bytes); 
    } 
}