我正在流中的位置pos
写一个整数数组。我基本上有int[]
,我使用Serializer.SerializeWithLengthPrefix(stream, array, typeof(int[]), PrefixStyle.Fixed32, -1);
。这会将具有正确前缀长度的数组附加到流中。
我想在随机索引中反序列化流中的元素。一种方法可能是通过pos + (index*fixedLength)
寻找流,但我注意到这个数组中的整数是用DataFormat.Default
编写的,它产生了一个变长编码。
有没有办法改变这个?
我可以看到一种方法是将数组封装为某个包装类中的属性。然后我可以在属性中指定DataFormat.FixedSize
。这是这种情况的最佳做法吗?
fixedLength
会是什么? sizeof(int)
?
谢谢, 尤利安
答案 0 :(得分:0)
坦率地说,如果您想要的只是文件(或任何其他流)中固定大小的整数,那么使用协议缓冲区绝对没有任何好处;忘了 - 只需将整数写成4字节块(little-endian可能是最方便的),并直接从文件(/ stream)访问它们。协议缓冲区使得使用结构化数据变得容易,但这并不意味着您应该将它用于每个作业。在这种情况下,仅使用原始偏移是绝对有意义的。