【问题标题】:Google Protocol BuffersGoogle 协议缓冲区
【发布时间】:2023-09-16 09:37:01
【问题描述】:

我正在尝试解析一个非常大的消息(大约 25 个字段)并将它们序列化。消息中的字段始终以相同的顺序出现,并且在 proto 文件中我对它们进行了相应的编号。有没有办法用标签值(proto文件中的数字)设置字段?

谢谢, 化学。

【问题讨论】:

  • “有没有一种方法”...嗯,你使用的是什么实现,对于初学者来说 - 从内存中,有大约 40 种不同的实现/工具
  • 现在我正在比较相应的名称并设置值,就像代码中的很多 IF 条件一样。我想摆脱他们。
  • 顺便说一句,我是用 java 做的

标签: serialization protocols protocol-buffers


【解决方案1】:
google::protobuf::Message myMessage;
const google::protobuf::Descriptor * myDescriptor = myMessage.GetDescriptor();
const google::protobuf::FieldDescriptor * myField = myDescriptor->FindFieldByNumber(9001);
const google::protobuf::Reflection * myReflection = myMessage.GetReflection();
myReflection->SetInt32( &myMessage, myField, 7);

显然,您需要更改字段编号、字段类型以及要设置的值。

【讨论】:

  • 非常感谢。我确实在 API 中找到了 FieldDescriptor.findFieldByNumber(),但无法连接其他点。