C#读取字节数组

好的,所以我正在构建服务器客户端应用程序。

基本上,服务器接收包含头[2bytes],cryptokeys [2bytes]和数据的数据包

我正在考虑构建类来将整个数据包(byte [])加载到其中,然后使用内部类方法处理数据包。 现在回答这个问题。 什么是最好的方法? 我需要能够读取Int16 Int32 String(int lenght)并且可能浮动

编辑:有点像二进制读取器,但作为输入的byte []

我想说BinaryReader是你最好的选择。 根据过去的经验,有时您需要从BinaryReaderinheritance。 一个主要的例子是当你需要读取一个以null结尾的字符串,因为BinaryReader读取长度为前缀的字符串。 或者您可以编写自己的类,但最终会提供与BinaryReader相同的function。

最后我可能只是创建自己的类。 这样,如果您需要对如何提取数据进行更改,则可以编辑您的类。 如果您使用BinaryReader编写整个项目并意识到需要添加function,那么您将被搞砸

 public class MyBinaryReader : BinaryReader { public MyBinaryReader(byte[] input) : base(new MemoryStream(input)) { } public override string ReadString() { // read null-terminated string } } 

有一个BitConverter类。 它的静态成员接受一个字节数组和一个起始索引,并将字节转换为指定的类型。 够了吗?

如果就这么简单,那么BinaryReader就可以直接通过流,或BitConverter直接放在缓冲区上就足够了; 和字符串Encoding 。 但首先同意字节顺序;)

如果它更复杂且基于对象,那么我建议使用预先封装的序列化器。 编写完整的序列化程序并非易事。

您可能还希望查看流式API而不是将其全部加载到内存中 – 这对于大型邮件来说往往会变得昂贵。

为什么不使用Stream,例如NetworkStream?