在 protobuf3 中发送显式零

2023-12-14

在 Protobuf3 中,零是数字类型的默认值,因此它们在序列化时会被过滤掉。

我有一个应用程序,仅当值发生更改时才需要发送该值。例如,x 是 1,现在 x 是 0,发送该值。

不可能仅发送增量,例如-1,因为其中一些值是浮点数或双精度数,并且我们不希望产生错误。

我需要序列化某些类中的 200 多个不同变量,因此诸如“添加布尔值来标记哪些字段已更改”之类的解决方案是可能的,但并不有趣。其他需要进行大量现场工作或处理的建议也是不可取的。

是否有一个简单的机制来告诉 protobuf3 显式保留一个值,即使它是默认值?

可能的解决方案:

  • 每次都发送全班同学。这里的主要缺点是某些字段可能包含大量数据。
  • 在模式中使用布尔值“已更改”来指示变量是否已更改,即使它为 0
  • 使用魔法值。糟糕的想法,但有可能。不打算这样做。

如果你需要区分0 and null那么你可以使用 proto3 包装类型:https://developers.google.com/protocol-buffers/docs/reference/csharp- generated#wrapper_types对于这种情况有特殊的包装类型:StringWrapper, Int32Wrapper and etc。与 C# 值类型相对应的所有包装类型 (Int32Wrapper, DoubleWrapper, BoolWrapper等)被映射到Nullable<T> where T是相应的不可空类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 protobuf3 中发送显式零 的相关文章

随机推荐