2012-05-08 33 views
2

我想將數據編碼成緩衝區中的二進制格式,稍後我將寫入文件或通過套接字進行傳輸。 C#類或類最適合用來創建包含二進制數據的List<byte>我應該使用哪個類將二進制數據寫入緩衝區(比如字節列表)

我將以自定義編碼格式(對於字符串)和整數和浮點數的常規二進制數字佈局存儲整數,單字節字符串(即ASCII),浮點數和其他數據類型。

BinaryWriter看起來像它有我需要的方法,但它必須爲我管理一個不斷增長的緩衝區,我想從編碼完成時產生一個List<byte>結果。

感謝

回答

7

BinaryWriter,寫入MemoryStream。如果您需要的內存超過可用內存,則可以輕鬆切換到temporary file流。

using (var myStream = new MemoryStream()) { 
    using (var myWriter = new BinaryWriter(myStream)) { 
     // write here 
    } 
    using (var myReader = new BinaryReader(myStream)) { 
     // read here 
    } 

    // put the bytes into an array... 
    var myBuffer = myStream.ToArray(); 

    // if you *really* want a List<Byte> (you probably don't- see my comment) 
    var myBytesList = myStream.ToArray().ToList(); 
} 
+0

您錯過了列表的轉換,這是我要求的最終結果,但我仍然給你了複選標記。 –

+0

這是故意的。你*可能*不想要一個'List ',因爲這意味着你正在改變緩衝區的內容。這幾乎從未完成,實際上所有采用緩衝區的BCL API都使用「byte []」而不是「List 」。也就是說,我已經爲完整性編輯了答案。 –

+0

夠公平!我已經在上述評論的解釋中接受了+1。 –

2

BinaryWriter寫入流。給它一個MemoryStream,當你想要你的List<byte>時,使用new List<byte>(stream.GetBuffer())

+0

+1用於顯示整個過程到列表 ... –

相關問題