2013-01-21 120 views
22

可能重複:
Creating a byte array from a stream我怎麼能寫的MemoryStream爲byte []

我想在內存中創建的文本文件,並把它寫byte[]。我怎樣才能做到這一點?

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; 
} 

但是,這並不因爲數據長度的工作

+1

的目的鍵入MemoryStre我有屬性「ToArray()」。在那裏,你得到的byte [] – Tomtom

+0

這能否幫助你http://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream? – Kaf

+2

@ yan.kun封閉的原稿在封閉時只有第一行。他添加了更多信息,以及 - 由於某種原因 - 張貼此重複。 –

回答

60

如何:

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

試試下面的代碼:

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。請注意,使用'using'而不是'Flush'更安全。還需要在Dispose之後訪問MemoryStream的某些特殊代碼 - 需要在使用(ms)之前創建MemoryStream ... –

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; 
    }