协议缓冲区:固定大小的缓冲区没有符号

protocol buffers : no notation for fixed size buffers?

本文关键字:缓冲区 符号 协议      更新时间:2023-10-16

由于我没有得到这个问题的答案,我必须原型并检查自己,因为我的数据集标头需要固定大小,我需要固定大小的字符串。那么,是否可以在协议缓冲区中指定固定大小的字符串或字节数组?这里并不明显,我对将固定大小的字符串强制到标头消息中感到有点糟糕。--即std::string('', 128) ;

如果没有,我宁愿使用#pragma pack(1) struct header {...};"

编辑

问题在这里间接回答。会回答,除了

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

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

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

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