由于我没有得到this问题的答案,我需要原型并检查自己,因为我的数据集标题需要固定大小,我需要固定大小的字符串。那么,是否可以在协议缓冲区中指定固定大小的字符串或字节数组?这里不是很明显,我有点不耐烦地将固定大小的字符串强制转换为标题消息。 --i.e,std::string('\0', 128)
;
如果不是,我宁愿使用#pragma pack(1) struct header {...};
'
修改
问题间接回答here。将回答
答案 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)。