protobuf-net反序列化序列化数组中的第k个元素

本文关键字:元素 反序列化 序列化 数组 protobuf-net | 更新日期: 2023-09-27 18:22:33

我正在流中pos位置写入一个整数数组。我基本上有一个int[],我使用Serializer.SerializeWithLengthPrefix(stream, array, typeof(int[]), PrefixStyle.Fixed32, -1);。这会将具有正确前缀长度的数组附加到流中。

我想在随机索引处反序列化流中的元素。一种方法是通过pos + (index*fixedLength)查找流,但我注意到这个数组中的整数是使用DataFormat.Default编写的,这会产生可变长度编码。

有办法改变这种情况吗?

我可以看到这样做的一种方法是将数组封装为某个包装类中的属性。然后我可以在属性中指定DataFormat.FixedSize。这是这种情况下的最佳实践吗?

fixedLength是什么?sizeof(int)

谢谢,Iulian

protobuf-net反序列化序列化数组中的第k个元素

坦率地说,如果你想要的只是文件(或任何其他流)中固定大小的整数,那么使用协议缓冲区绝对没有好处;忘记这一点——只需将整数写成4字节的块(小端序可能是最方便的),然后直接从文件(/stream)访问它们。协议缓冲区使使用结构化数据变得容易,但这并不意味着你应该在每项工作中都使用它。在这种情况下,只使用原始偏移是绝对有意义的。