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

时间:2014-09-18 17:45:01

标签: c# protobuf-net

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

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

有没有办法改变这个?

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

fixedLength会是什么? sizeof(int)

谢谢, 尤利安

1 个答案:

答案 0 :(得分:0)

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