我们是否应该在可选的protobuf字段中设置默认值以最小化通过线路发送的数据?
我想最小化通过线路发送的消息字节大小.为实现这一目标,我能想到的一个优化是:
if( message->my_optional_field() != value )
message->set_my_optional_field(value);
Run Code Online (Sandbox Code Playgroud)
这可以防止has_my_optional_field()在预期值等于默认值时调用,从而防止该字段出现在序列化数组中.这是一个好习惯吗?protobuf能提供开箱即用的东西吗?
问题类似于has_field()方法如何与protobuf中的默认值相关联? 事实上,已经在一个评论中回答了已接受的答案.但是,随后的评论对此声称提出异议.
Ken*_*rda 11
proto2和proto3之间的行为不同.
在proto2下,"存在"的概念与默认值的概念是分开的.一个字段设置为在proto2它的默认值是不一样的将其清除; 即使它是默认值,该值也将通过网络发送.在proto2中,为了"取消"你必须调用的字段clear_my_optional_field(); 然后它不会在电线上发送.Proto3也有单独的has_my_optional_field()方法来检查字段是否已设置.
在proto3下,"存在"的概念已被删除.相反,当且仅当字段未设置为默认值时,才会发送字段.该clear_方法与设置为默认值相同.该has_方法不再存在.此外,proto3取消了可配置默认值的概念 - 所有字段的默认值为0或空.
例外:对于消息类型的字段,proto3中的行为没有改变.这些领域仍然存在存在的概念.
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |