Protocol buffers 确定协议缓冲区消息类型的最佳实践
我需要序列化和反序列化与字节流之间的协议缓冲区消息序列。有几种预先确定的消息类型。建议采用何种方式对类型信息进行编码,以便我的应用程序能够知道它应该读取哪种类型?我的建议没有特定顺序:Protocol buffers 确定协议缓冲区消息类型的最佳实践,protocol-buffers,Protocol Buffers,我需要序列化和反序列化与字节流之间的协议缓冲区消息序列。有几种预先确定的消息类型。建议采用何种方式对类型信息进行编码,以便我的应用程序能够知道它应该读取哪种类型?我的建议没有特定顺序: 包括一个包含proto名称/id的字段(并在所有proto的示例1中为其提供相同的字段号) 使用(在页面底部)。在这种情况下,你可以 将作为字段包含(在消息中) 在java(和其他一些实现)中,您可以将FileDescriptor集作为分隔文件中的第一条消息写入 保持原型名称较小,并在文件名中使用原型名称,例
- 将作为字段包含(在消息中)
- 在java(和其他一些实现)中,您可以将FileDescriptor集作为分隔文件中的第一条消息写入
- 很明显,文件格式是什么
- 您可以扫描shell脚本以查找proto的使用位置
- 这种技术可以单独使用,也可以与上述2种技术结合使用
- 此技术可用于任何基于模式的文件(例如Cobol)
- 支持自我描述消息,其中
- 文件描述符是分隔文件中的第一条消息
- 消息中的第一个字段
- 具有搜索功能,可尝试将Protobuf消息中的字段与已知的Proto definition文件进行匹配,并提供可能的匹配信息
背景: 若您不知道,协议缓冲区协议文件可以转换为协议缓冲区消息 储存 自我描述信息w:
message SelfDescribingMessage {
// Set of .proto files which define the type.
required FileDescriptorSet proto_files = 1;
// Name of the message type. Must be defined by one of the files in
// proto_files.
required string type_name = 2;
// The message data.
required bytes message_data = 3;
}
最常见的方法是使用 例如:
message AnyMessage {
optional Message1 msg1 = 1;
optional Message2 msg2 = 2;
...
}
然后在AnyMessage
容器中对所有消息进行编码/解码。从protobuf 2.6开始,您还可以使用oneof
说明符,该说明符将确保只设置一个子消息。协议缓冲区是序列化的结构化数据。您能解释一下为什么您认为需要对序列化数据进行编码吗?