簡體   English   中英

字節數組和二進制讀取 - 用於測試/開發的調試環境?

[英]Byte Array & binary reading - Debug environment for testing/development?

我(接近)對這個主題完全陌生,並且閱讀了很多關於此的內容。 書籍、Stackexchange、博客等。 你知道,開發人員的共同點。 我覺得當您可以調試和測試自己閱讀的內容時,更容易實現“大局理解”。 我找到了很多理論信息,但嘗試“拔下”的實用方法卻較少。

到目前為止,我的想法大致是這樣的: byte[]BitConverter.GetBytes / BitConverter.ToInt32Encoding.UTF8.GetString()與數組開始的某種位置一起在這里大量涉及。 就好像數據報中的前 4 個字節包含一個 msg,然后 startindex 將是 4 的 sessionid? 出於這個目的,所有這些都像是沉重的東西。

有沒有更好的方法來打包/解包這樣的 arrays? 消息/數據報的大小最大為 64kb,並且從未擴展到不同的消息。

更具體地說:我想模擬(控制台應用程序,即)傳入數據包並解壓縮到對我的系統有用的信息。 然后相反,將答案傳輸回字節數組。 用於此目的的良好樣品 class 看起來/如何處理? 如何編碼/解碼成它? 協議規范具有數據包的固定字節。 我將在下面留下一個例子(雖然不是來自真實的規范);

// One Packet 
// 
// Description   -> |Identifier|name length|message length|    name   |    message   |
// Size in bytes -> |     4    |     4     |       4      |name length|message length|

在大多數情況下,您不會自己讀/寫二進制信息。 有幾個框架可以將類/結構序列化到二進制數據/從二進制數據序列化。 BinaryFormatterprotobuf是兩種方式。

但是,如果您想自己嘗試一下,我建議您只使用FileStream ,因為它與任何其他 stream 完全相同(有點簡化的陳述,但幾乎是真的;)使用BinaryWriter寫入信息並使用BinaryReader讀取。

沒有理由直接處理byte[]數組。 您始終可以使用它初始化MemoryStream以獲得對BinaryReaderBinaryWriter的訪問權限

重要的是您以完全相同的順序讀取/寫入字段。

更新

使用您更新的問題的示例:

// Description   -> |Identifier|name length|message length|    name   |    message   |
// Size in bytes -> |     4    |     4     |       4      |name length|message length|

using (var stream  = new MemoryStream(yourByteBuffer))
{
   using (reader = new BinaryReader(stream))
   {
       var identifier = reader.ReadInt32();
       var nameLength = reader.ReadInt32();
       var msgLength = reader.ReadInt32();
       var name = reader.ReadChars(nameLength);
       var msg = reader.ReadChars(msgLength);
   }
}

// to get a string from the chars:
var message = new string(msg);

System.IO包含用於處理文件和字節流的類型。 其中許多包括示例,例如。 打開文件以讀取為字節 Stream: FileStream Constructor (String, FileMode)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM