gpt4 book ai didi

protocol-buffers - 在 protobuf3 中发送显式零

转载 作者:行者123 更新时间:2023-12-04 09:55:21 26 4
gpt4 key购买 nike

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

我有一个应用程序,只有在它发生变化时才需要发送一个值。例如,x 是 1,现在 x 是 0,发送这个值。

不可能只发送增量,例如 -1,因为其中一些值是浮点数或 double 数,而且我们不想产生错误。

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

是否有一种简单的机制可以告诉 protobuf3 明确保留一个值,即使它是默认值?

可能的解决方案:

  • 每次都发送整个类(class)。这里的主要缺点是某些字段可能有大量数据。
  • 在架构中使用 bool 值“已更改”来指示变量是否已更改,即使它是 0
  • 使用魔法值。可怕的想法,但可能。不打算这样做。
  • 最佳答案

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

    关于protocol-buffers - 在 protobuf3 中发送显式零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61931285/

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