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

时间:2010-11-15 14:51:55

标签: c++ protocol-buffers

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

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

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:7)

提前知道是不可能的,因为protobuf将给出的结构打包成尽可能少的字节 - 例如,int x = 1;不会使用四个字节 - 所以图书馆必须走完整个图表知道输出大小。

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

答案 2 :(得分:1)

您可以在不发送邮件的情况下填写邮件,然后致电CalculateSize()