[英]Deserialize byte array
我有一个字节数组,我需要将其反序列化为几种对象类型。
该对象包含{float,short,int}
。 在Java中,我可以使用ObjectInputStream
来做到这一点:
ObjectInputStream is;
is.readFloat()
is.readShort()
is.readInt()
我正在寻找一种用C#做到这一点的方法。
读取第一个x字节为float,下一个y字节为short,下一个z字节为int。
您想使用BinaryReader :
如果您有要反序列化的字节数组,则将其包装在内存流中,然后使用BinaryReader
。 像这样:
byte[] inputArray; // somehow you've obtained this
using (var inputStream = new MemoryStream(inputArray))
{
using (var reader = new BinaryReader(inputStream))
{
float f1 = reader.ReadSingle();
short s1 = reader.ReadInt16();
int i1 = reader.ReadInt32();
}
}
您也可以使用BitConverter类来执行此操作,但是必须保持状态。 例如,您可以读取float
, short
和int
如下所示:
byte[] inputArray;
int ix = 0;
float f1 = BitConverter.ToSingle(inputArray, ix);
ix += sizeof(float); // increment to the next value
short s1 = BitConverter.ToInt16(inputArray, ix);
ix += sizeof(short);
int i1 = BitConverter.ToInt32(inputArray, ix);
ix += sizeof(int);
在这两种方法中,我建议使用BinaryReader
,因为它在大多数情况下更灵活,更容易使用。 如果您只有少量要反序列化的项目,则BitConverter
会很方便。 我认为它具有更快的潜力,但这没关系,除非您的应用程序对性能高度敏感。 如果对数据进行反序列化非常关键,则可能要编写一个自定义的反序列化器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.