2013-01-21 15 views
22

Powiel możliwe:
Creating a byte array from a streamJak mogę napisać MemoryStream do byte []

próbuję utworzyć plik tekstowy w pamięci i zapisz go byte[]. Jak mogę to zrobić?

public byte[] GetBytes() 
{ 
    MemoryStream fs = new MemoryStream(); 
    TextWriter tx = new StreamWriter(fs); 

    tx.WriteLine("1111"); 
    tx.WriteLine("2222"); 
    tx.WriteLine("3333"); 

    tx.Flush(); 
    fs.Flush(); 

    byte[] bytes = new byte[fs.Length]; 
    fs.Read(bytes,0,fs.Length); 

    return bytes; 
} 

Ale to nie działa ze względu na długość danych

+1

Przedmiotem wpisz MemoryStre am ma właściwość "ToArray()". Otrzymasz bajt [] – Tomtom

+0

Czy to pomoże Ci http://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream? – Kaf

+2

@ yan.kun Zamknięty oryginał miał tylko pierwszą linię, gdy był zamknięty. Dodał więcej informacji od tego czasu, a także - z jakiegoś powodu - publikując ten duplikat. –

Odpowiedz

60

Jak o:

byte[] bytes = fs.ToArray(); 
1
byte[] ObjectToByteArray(Object obj) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     BinaryFormatter b = new BinaryFormatter(); 
     b.Serialize(ms, obj); 
     return ms.ToArray(); 
    } 
} 
4

Wypróbuj poniższy kod:

public byte[] GetBytes() 
{ 
MemoryStream fs = new MemoryStream(); 
TextWriter tx = new StreamWriter(fs); 

tx.WriteLine("1111"); 
tx.WriteLine("2222"); 
tx.WriteLine("3333"); 

tx.Flush(); 
fs.Flush(); 
byte[] bytes = fs.ToArray(); 
return bytes; 
} 
+0

+1. zauważ, że używanie 'using' zamiast' Flush' jest dużo bezpieczniejsze. Wymaga również nieco nietypowego kodu dla MemoryStream, aby był dostępny po Dispose - trzeba utworzyć MemoryStream przed 'using (ms)' ... –

1
public byte[] GetBytes() 
    { 
     MemoryStream fs = new MemoryStream(); 
     TextWriter tx = new StreamWriter(fs); 

     tx.WriteLine("1111"); 
     tx.WriteLine("2222"); 
     tx.WriteLine("3333"); 

     tx.Flush(); 
     fs.Flush(); 

     fs.Position = 0; 

     byte[] bytes = new byte[fs.Length]; 
     fs.Read(bytes, 0, bytes.Length); 

     return bytes; 
    }