【发布时间】:2010-11-15 14:51:55
【问题描述】:
我的 (DSP) 应用程序以恒定速率生成数据。速率取决于用户选择的配置。我想知道每秒生成多少字节。数据结构包含一个重复的(打包的)浮点字段。字段的长度是恒定的,但可以由用户更改。
是否有一个protocol buffers函数可以在序列化之前计算消息大小?
【问题讨论】:
标签: c++ protocol-buffers
我的 (DSP) 应用程序以恒定速率生成数据。速率取决于用户选择的配置。我想知道每秒生成多少字节。数据结构包含一个重复的(打包的)浮点字段。字段的长度是恒定的,但可以由用户更改。
是否有一个protocol buffers函数可以在序列化之前计算消息大小?
【问题讨论】:
标签: c++ protocol-buffers
如果您已经构建了消息对象,您可以在消息上调用 ByteSize(),它返回序列化消息将占用的字节数。有一个指向 ByteSize 的 C++ 文档的链接。
【讨论】:
不可能提前知道,因为 protobuf 将提供给它的结构打包成尽可能少的字节 - 例如,它不会为 int x = 1; 使用四个字节 - 所以库必须遍历整个图表知道输出大小。
我相信您可以通过对您自己设计的符合 protobuf 的流执行序列化操作来发现这一点,该流只计算给定的字节数。这可能会很昂贵,但不会比图书馆做这项工作的成本高。
【讨论】:
您可以在不发送的情况下填写消息,然后调用CalculateSize()就可以了
【讨论】: