谷歌协议缓冲区在序列化之前是否支持大小计算?

Dan*_*Dan 13 c++ protocol-buffers

我的(DSP)应用程序以恒定速率生成数据.速率取决于用户选择的配置.我想知道每秒生成多少字节.数据结构包含重复(打包)浮点字段.字段的长度是常量,但可以由用户更改.

是否有协议缓冲区函数将在序列化之前计算消息大小?

dme*_*ter 17

如果已构建消息对象,则可以在消息上调用ByteSize(),该消息将返回序列化消息将占用的字节数.有一个指向ByteSize的C++文档的链接.


Ste*_*end 7

提前知道是不可能的,因为protobuf将给出的结构打包成尽可能少的字节 - 例如它不会使用四个字节int x = 1;- 因此库必须遍历整个图形才能知道输出大小.

我相信你可以通过对你自己设计的protobuf兼容流进行序列化操作来找到它,只计算它给出的字节数.这可能代价高昂,但不会比图书馆完成这项工作更昂贵.