c++ - 打印 Protobuf 消息时省略字段

标签 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 中,但似乎我必须针对消息描述中的每个更改修改该方法。

最佳答案

最好的办法是复制该消息,清除拷贝中的 block ,然后打印它。

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

请注意,这里没有性能问题,因为 DebugString() 本身已经比复制消息慢得多

如果你想让这个更通用,你可以根据 protobuf reflection 编写一些代码它遍历复制的消息并删除所有长尺寸的 bytes 类型的字段。

关于c++ - 打印 Protobuf 消息时省略字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639891/

相关文章:

c++ - 我可以在写入磁盘之前修改 ofstream 吗?

import - Protobuffs 从另一个目录导入

java - 我无法从 wales-latest.osm.pbf 文件中提取 border_type=city

c++ - 在 visual studio 2010 和 c++ 中使用 OpenGL 绘制带有箭头的轴

c++ - 友元和命名空间

javascript - Protocol Buffer : Uncaught reference error: exports is not defined

java - 你能理解protoc运行没有错误,但不生成源文件吗?

typescript - 强制 Protobuf.js 忽略无法识别的 JS 端字段

c++ - 结构数组中按字母顺序排序的问题气泡

c++ - 为什么 getxattr 会填充额外的元素?