打印Protobuf消息时省略字段

时间:2015-09-17 21:00:28

标签: c++ protocol-buffers

在Google Protobuf中调用message.DebugString()时,是否可以选择要考虑的字段或至少哪些字段类型?

我有以下消息说明:

message Message
{
    optional string name = 1
    optional int32 blockSize = 2;
    optional bytes block = 3;
}

我只想打印nameblockSize并省略block字段,该字段恰好很大(例如:64KB),其内容无关紧要。

我构建了一个只为感兴趣的字段添加std::stringstream的方法,但似乎我必须为消息描述中的每个更改修改方法。

1 个答案:

答案 0 :(得分:3)

您最好的选择是复制邮件,从副本中清除block,然后打印。

Message copy = original;
copy.clear_block();
cout << copy.DebugString() << endl;

请注意,这里没有性能问题,因为DebugString()本身已经比制作邮件副本慢。

如果您想要更加通用,可以根据protobuf reflection编写一些代码,这些代码遍历复制的邮件,并删除长度为bytes的所有字段。