动态创建新的 protobuf 消息

Dynamically create a new protobuf message

本文关键字:protobuf 消息 创建 动态      更新时间:2023-10-16

>假设我有一个消息A,我想动态创建一个新的消息B,它应该包含A中的所有字段和一个字段(不包含在A中),如何在protobuf中执行此操作?

首先,查看 descriptor.h 中定义的类型。这些"描述符"描述了Protobuf类型。您可以通过创建一个FileDescriptorProto(基本上是.proto文件的 AST;请参阅descriptor.proto)然后使用 DescriptorPool 将其"编译"为FileDescriptor来动态创建一个。这反过来将包含文件中定义的每种类型的Descriptor

获得动态生成的类型的Descriptor后,可以使用DynamicMessage动态构造该类型的消息对象。您可以使用Reflection界面动态访问此消息的字段。