由于我没有得到关于这个问题的答案,我必须制作原型并检查自己,因为我的数据集标题需要固定大小,所以我需要固定大小的字符串。那么,是否可以在协议缓冲区中指定固定大小的字符串或字节数组?这在这里并不明显,我对将固定大小的字符串强制放入标题消息感到有点难过。——即,std::string('\0', 128)
;
如果不是,我宁愿使用#pragma pack(1) struct header {...};
'
编辑
问题在这里间接回答。会回答,除了
protobuf 在协议中没有这样的概念,在 .proto 模式语言中也没有。在字符串和 blob 中,数据在技术上始终是使用长度前缀的可变长度(其本身使用 varint 编码,因此即使长度也是可变长度)。
当然,如果您只存储特定长度的数据,那么它会排成一行。另请注意,由于 protobuf 中的字符串是使用 UTF-8 编码的 unicode,因此编码数据的长度并不像字符数那么简单(除非您只使用 ASCII 字符)。
这是对先前答案的轻微澄清。Protocol Buffers 不将字符串编码为 UTF-8,而是将它们编码为常规字节。在线格式将是消耗的字节数,后跟实际字节数。请参阅https://developers.google.com/protocol-buffers/docs/encoding/。
虽然在线格式始终相同,但协议缓冲区提供了两个接口供开发人员使用,字符串和字节,主要区别在于前者通常会尝试向开发人员提供字符串类型,而后者会尝试提供提供字节类型(即Java会为字符串提供String,为字节提供ByteArray)。