什么是protobuf-net SerializeWithLengthPrefix标签参数?
这个方法接受一个整数作为最后一个参数,但我不确定我是否理解我将完全使用它。
Serializer.SerializeWithLengthPrefix(stream, object, PrefixStyle.Base128, [tag]);
对于相应的Deserialize方法也是如此。
它只是一种标记消息的方法,可以在反序列化时添加某种“查询”function来过滤掉不需要的消息,还是有任何其他用法?
基本上,它是一个额外的标记, 可以 (虽然不一定)用于记录被添加的消息的“类型”,因为假设(当使用*WithLengthPrefix
方法时)是有多个消息相同的流。
通过包含,它还意味着整个复合流本身是完全有效的protobuf消息。
使用方法:
- 您可以序列化
List
,然后重复反序列化(with-length-prefix)单个Foo
项,反之亦然 - 使用异构的对象集,您可以使用
Serializer.NonGeneric
API来允许基于标记的类型解析,即代码相当于“if 1 then Invoice; if 2 then Order,if 3 then then skip it,then 4 then then客户“等 – 如果使用NetworkStream
作为消息发送设备,这尤其有用。 这种方法(每种类型使用不同的标记)允许您从流中读取对象,并正确地反序列化它们,而无需事先知道下一条消息的类型
如果你愿意,可以省略它 – 只传递零(IIRC)。 这将为每个附加的消息保存(通常)一个字节,但是:这意味着该流本身不再是有效的protobuf。 当然,它仍然可以通过读取时传递零来读取。