好的,我正在构建服务器< - >客户申请。
服务器基本上收到一个包含头[2bytes],cryptokeys [2bytes]和data
的包我正在考虑构建类以将整个数据包(byte [])加载到其中,然后使用内部类方法处理数据包。现在回答这个问题。什么是最好的方法?我需要能够读取Int16 Int32 String(int lenght)并且可能浮动
编辑:有点像二进制读取器,但是作为输入的byte []
答案 0 :(得分:3)
我会说BinaryReader
是你最好的选择。根据过去的经验,有时您需要从BinaryReader继承。一个主要的例子是当你需要读取一个以null结尾的字符串,因为BinaryReader读取长度为前缀的字符串。或者你可以编写自己的类,但最终会提供与BinaryReader相同的功能。
最后我可能会创建自己的类。这样,如果您需要对如何提取数据进行更改,则可以编辑您的类。如果您使用BinaryReader编写整个项目并意识到您需要添加功能,那么您将搞砸。
public class MyBinaryReader : BinaryReader
{
public MyBinaryReader(byte[] input) : base(new MemoryStream(input))
{
}
public override string ReadString()
{
// read null-terminated string
}
}
答案 1 :(得分:2)
有一个BitConverter
课程。它的静态成员接受一个字节数组和一个起始索引,并将字节转换为指定的类型。这够了吗?
答案 2 :(得分:0)
如果这么简单,那么流上的BinaryReader
或直接在缓冲区上的BitConverter
就足够了;和Encoding
表示字符串。但首先要同意字节顺序;)
如果它更复杂且基于对象,那么我建议使用预先封装的序列化器。编写完整的序列化程序并非易事。
您可能还希望查看流式API而不是将其全部加载到内存中 - 这对于大型邮件来说往往会变得昂贵。
答案 3 :(得分:0)
为什么不使用Stream,例如NetworkStream?