gpt4 book ai didi

protocol-buffers - 不要在可选的protobuf字段中设置默认值,以最大程度地减少通过网络发送的数据

转载 作者:行者123 更新时间:2023-12-04 06:33:47 28 4
gpt4 key购买 nike

我们是否不应该在可选的protobuf字段中设置默认值以最大程度地减少通过电线发送的数据?

我想最小化通过电线发送的消息字节大小。为此,我想到的一个优化是:

if( message->my_optional_field() != value )
message->set_my_optional_field(value);

这样可以防止在预期值等于默认值时调用 has_my_optional_field(),因此可以防止该字段出现在序列化数组中。这是一个好习惯吗? protobuf是否提供开箱即用的类似功能?

问题类似于 how do has_field() methods relate to default values in protobuf?
实际上,它已在对已接受答案的评论之一中得到了回答。但是,随后的评论对 claim 提出了异议。

最佳答案

proto2和proto3的行为不同。

在proto2下,“存在”的概念与默认值的概念是分开的。在proto2中将字段设置为其默认值与清除字段不同。即使它是默认值,也会通过电线发送该值。在proto2中,为了“取消设置”该字段,您必须调用clear_my_optional_field();那么它就不会通过网络发送。 Proto3还具有单独的has_my_optional_field()方法来检查是否设置了该字段。

在proto3下,删除了“存在”的概念。而是将在且仅当未将其设置为默认值时才发送该字段。 clear_方法与默认设置相同。 has_方法不再存在。另外,proto3取消了可配置默认值的概念-所有字段的默认值为0或为空。

异常(exception):对于消息类型的字段,其行为在proto3中未更改。这些领域仍然存在一个概念。

关于protocol-buffers - 不要在可选的protobuf字段中设置默认值,以最大程度地减少通过网络发送的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034746/

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