Serialization protobufs中的选项是否影响消息大小?

Serialization protobufs中的选项是否影响消息大小?,serialization,metadata,protocol-buffers,Serialization,Metadata,Protocol Buffers,我使用protobufs在项目中的不同节点之间发送消息,为了方便起见,我想为我的消息添加一些静态元数据。例如,对于消息中的每个字段,我想定义一个人类可读的名称(即“Response message”而不是“resp_msg”),GUI可以在显示数据时将其用作标签。此信息不需要序列化并通过有线传输 我想看看protobufs是否允许定义这个元数据,有人建议我使用自定义选项。在我看来,定制选项在内部实现为消息中的附加数据。是这样,还是完全是静态元数据,在实际使用这些protobuf时没有序列化?i、

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


我想看看protobufs是否允许定义这个元数据,有人建议我使用自定义选项。在我看来,定制选项在内部实现为消息中的附加数据。是这样,还是完全是静态元数据,在实际使用这些protobuf时没有序列化?i、 e.如果我向消息添加选项,序列化消息的结构是否会改变?

如果您指的是.proto模式中的自定义选项;不,这些不构成有效载荷的一部分。它们可能在运行时可用,也可能不可用-这在很大程度上取决于您正在使用的特定库和工具,但是:如果目标平台的工具将编译的
DescriptorProto
元数据(
DescriptorProto
大致映射到
message
in.proto terms)嵌入到生成的代码中,然后,您可能确实能够使用API提取该数据——或者最坏的情况是:将其反序列化为
描述符proto
(定义见
描述符.proto
)并手动读取

但这并不能保证

因此:这取决于两个方面:

  • 您使用的库、平台和工具是什么
  • 您的自定义选项是否扩展了
    描述符协议
    ,而不是扩展了实际消息;如果您使用附加字段扩展实际消息,则这是消息负载的一部分,并将增加消息大小