gpt4 book ai didi

c# - 什么是 protobuf-net SerializeWithLengthPrefix 标记参数?

转载 作者:可可西里 更新时间:2023-11-01 08:25:36 24 4
gpt4 key购买 nike

此方法接受一个整数作为最后一个参数,但我不确定我是否理解我将使用它的确切目的。

Serializer.SerializeWithLengthPrefix(stream, object, PrefixStyle.Base128, [tag]);

对应的Deserialize方法也是如此。

它只是一种标记消息以在反序列化上添加某种“查询”功能以过滤掉不需要的消息的方法,还是有任何其他用途?

最佳答案

基本上,它是一个额外的标记,可以(尽管不是必须)用于记录添加的消息的“类型”,因为假设(当使用 *WithLengthPrefix 方法时) ) 是同一个流中有多个消息。

被包含在内,还意味着整个复合本身是一个完全有效的 protobuf 消息。

使用方法:

  • 您可以序列化 List<Foo> ,然后重复反序列化(使用长度前缀)单个 Foo 项,反之亦然
  • 对于一组异构对象,您可以使用 Serializer.NonGeneric API 允许基于标签的类型解析,即代码等效于“if 1 then Invoice; if 2 then Order, if 3 then skip it, if 4然后是 Customer”,等等 - 如果使用 NetworkStream 作为消息发送设备,这尤其有用。这种方法(每种类型使用不同的标签)允许您从流中读取对象,并正确反序列化它们,而无需事先知道下一条消息的类型

如果你愿意,可以省略它 - 只需传递零 (IIRC)。这将(通常)为每个附加的消息保存一个字节,但是:这意味着流本身不再是有效的 protobuf。读的时候传零,当然还是可以读的。

关于c# - 什么是 protobuf-net SerializeWithLengthPrefix 标记参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8601647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com