协议缓冲区:没有固定大小缓冲区的表示法?

时间:2012-04-10 15:12:02

标签: c++ protocol-buffers file-format

由于我没有得到this问题的答案,我需要原型并检查自己,因为我的数据集标题需要固定大小,我需要固定大小的字符串。那么,是否可以在协议缓冲区中指定固定大小的字符串或字节数组?这里不是很明显,我有点不耐烦地将固定大小的字符串强制转换为标题消息。 --i.e,std::string('\0', 128);

如果不是,我宁愿使用#pragma pack(1) struct header {...};'

修改

问题间接回答here。将回答

2 个答案:

答案 0 :(得分:3)

protobuf在协议中没有这样的概念,也没有.proto模式语言。在字符串和blob中,数据总是使用长度前缀技术可变长度(它本身使用varint编码,因此即使长度是可变长度)。

当然,如果您只存储特定长度的数据,那么它将排成一行。另请注意,由于protobuf中的字符串是使用UTF-8编码的unicode,因此编码数据的长度与字符数一样简单(除非您只使用ASCII字符)。

答案 1 :(得分:1)

这是对前一个答案的略微澄清。协议缓冲区将字符串编码为UTF-8,它将它们编码为常规字节。线上格式是消耗的字节数,后跟实际字节。请参阅https://developers.google.com/protocol-buffers/docs/encoding/

虽然在线格式总是相同的,但协议缓冲区为开发人员提供了两个接口,字符串和字节,主要区别在于前者通常会尝试向开发人员提供字符串类型,后者作为后者将尝试提供字节类型(即Java将为字符串提供String,为字节提供ByteArray)。