我有一个包含多条消息的Stream
。我使用SerializeWithLengthPrefix
来保存这些消息。
我需要创建一个索引映射来查找 nth 消息的字节偏移量,这样我就可以这样做:
public object Read(int index)
{
object deserialized;
_stream.Seek( _map[index], SeekOrigin.Begin);
ProtoBuf.Serializer.NonGeneric.TryDeserializeWithLengthPrefix(
_stream,
ProtoBuf.PrefixStyle.Base128,
_typeResolver,
out deserialized
);
return deserialized;
}
其中_map
是未知的。
目前,我找到地图的解决方案将完全反序列化消息。
所以我有两个问题;
我是否可以跳过长度前缀并查找每条消息的所有起始(字节偏移)位置,而无需反序列化整个消息流?
是否可能只是简单地反序列化消息并跟踪流位置的变化会更快?
答案 0 :(得分:3)
由于您使用的是base-128前缀,因此每条消息可能只需使用Serializer.TryReadLengthPrefix
两次。第一次返回字段标题 - 第二次是长度。然后向前跳过那么多字节到下一条消息。