在Google Protobuf中调用message.DebugString()
时,是否可以选择要考虑的字段或至少哪些字段类型?
我有以下消息说明:
message Message
{
optional string name = 1
optional int32 blockSize = 2;
optional bytes block = 3;
}
我只想打印name
和blockSize
并省略block
字段,该字段恰好很大(例如:64KB),其内容无关紧要。
我构建了一个只为感兴趣的字段添加std::stringstream
的方法,但似乎我必须为消息描述中的每个更改修改方法。
答案 0 :(得分:3)
您最好的选择是复制邮件,从副本中清除block
,然后打印。
Message copy = original;
copy.clear_block();
cout << copy.DebugString() << endl;
请注意,这里没有性能问题,因为DebugString()
本身已经多比制作邮件副本慢。
如果您想要更加通用,可以根据protobuf reflection编写一些代码,这些代码遍历复制的邮件,并删除长度为bytes
的所有字段。