反序列化字节数组
本文关键字:数组 字节数 字节 反序列化 | 更新日期: 2023-09-27 18:31:51
我有一个字节数组,我需要将其反序列化为几种对象类型。
对象包含{float,short,int}
.在Java中,我会像这样ObjectInputStream
:
ObjectInputStream is;
is.readFloat()
is.readShort()
is.readInt()
我正在寻找一种在 C# 中做到这一点的方法。
读取第一个 x 字节作为浮点数,下一个 y 字节为短字节,下一个 z 字节作为整数。
你想使用 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
很方便。我想它有可能更快,但这并不重要,除非您的应用程序对性能高度敏感。如果反序列化数据如此关键,您可能会编写一个自定义反序列化程序。