2011-01-19 13 views

risposta

874

Il modo più semplice per convertire un array di byte a un flusso sta usando la classe MemoryStream:

Stream stream = new MemoryStream(byteArray); 
+17

Si prega di notare che questo modo di creare uno stream non è forse l'ideale: "Questo costruttore non espone il flusso sottostante. GetBuffer lancia UnauthorizedAccessException. " http://msdn.microsoft.com/en-us/library/e55f3s5k.aspx – noocyte

+13

@noocyte qual è il modo ideale allora? – developerbmw

+4

ma è comunque possibile utilizzare 'stream.ToArray()' se si desidera ripristinare l'array di byte. –

260

Stai cercando il MemoryStream.Write method. Ad esempio, il codice seguente scrive il contenuto di una matrice byte[] in un flusso di memoria:

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

In alternativa, si potrebbe create a new, non ridimensionabile MemoryStream dell'oggetto in base alla matrice di byte:

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

Questa è la migliore risposta. È conciso e copre tutte le applicazioni pratiche. C'è un trucco con l'utilizzo del costruttore basato su array di byte come indicato qui - il flusso risultante non è ridimensionabile. – Jduv

+10

Ricorda inoltre di ripristinare lo stream in seguito: stream.Seek (0, SeekOrigin.Begin); –

+0

Si noti che la prima opzione 'MemoryStream.Write' richiede molta più memoria quindi' new MemoryStream (myByteArray) ' – Alex

23

L'approccio generale di scrivere in qualsiasi flusso (non solo MemoryStream) è quello di utilizzare BinaryWriter:

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