Protobuf中的选项会影响邮件大小吗?

时间:2018-09-30 09:11:13

标签: serialization metadata protocol-buffers

我正在使用protobufs在项目中的不同节点之间发送消息,为方便起见,我想为消息添加一些静态元数据。例如,对于消息中的每个字段,我想定义一个人类可读的名称(即“ Response Message”而不是“ resp_msg”),GUI在显示数据时可以用作标签。此信息无需序列化并通过电线传输。

我一直在寻找protobuf是否允许定义此元数据,并且有人指出我要使用自定义选项。在我看来,自定义选项在内部被实现为消息内部的附加数据。是这种情况,还是在实际使用这些protobuf时没有序列化的完全静态的元数据?即,如果我在邮件中添加选项,序列化邮件的结构是否会改变?

1 个答案:

答案 0 :(得分:3)

,如果您是指.proto模式中的自定义选项 ;不,那些不构成有效载荷的一部分。它们可能可以在运行时进行检查-这在很大程度上取决于您使用的特定库和工具,但是:如果目标平台的工具嵌入了已编译的{{1} }元数据({.proto术语中的DescriptorProto大致映射到DescriptorProto)到生成的代码中,那么您确实可以使用API​​提取该数据-或更糟的情况是:将其反序列化为{ {1}}(在message中定义)并手动将其读出。

但这不能保证。

所以:这取决于两者:

  • 您正在使用的库,平台和工具
  • 您的自定义选项是否扩展了DescriptorProto之类的功能,而不是扩展您的实际消息;如果您使用其他字段扩展实际消息,则 是消息有效负载的一部分,并且会增加消息大小