反序列化字节数组

本文关键字:数组 字节数 字节 反序列化 | 更新日期: 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 类执行此操作,但必须维护状态。例如,您可以像这样读取floatshortint

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很方便。我想它有可能更快,但这并不重要,除非您的应用程序对性能高度敏感。如果反序列化数据如此关键,您可能会编写一个自定义反序列化程序。