Google 协议重复值的结构如何?它们的局限性和优势是什么?

How are Google Protocol repeated values structured? What are their limitations and advantages?

我正在尝试创建一个数组,用于将数据从 C++ 应用程序传输到 Java 应用程序。由于两种语言,您如何格式化 Google 协议消息?

另外,它们的局限性和优势是什么?

到目前为止,我有以下内容:

message Config {
    repeated string types = 1;
}

我想我漏掉了什么!

如果你的意思是在线 - 那么首先:序列化程序的工作就是担心这个,但是在这种情况下它简单地实现为(每个重复元素):

0x0a = "field 1, length prefixed" (strings are always length prefixed)
{number of bytes as UTF8, varint-encoded}
{that many bytes of UTF8}

因此,如果您重复了 3 个项目,您将有 3 个批次的 0x0a、varint、有效负载一个接一个地猛击。对于一些原始类型——整数等,有一个 "packed" 编码,通过在整个数组 byte-length 前面加上 byte-length 来消除每个元素对 header 的需要]首先,然后只是数组内容作为原始non-tokenized数据。


如果你的意思是从调用者的角度,那么:这取决于实现,但本质上你应该期待一些熟悉的API - 该框架共有。这可能意味着 repeated 数据作为数组/向量公开,或者可能意味着 "collection" class 和 Add 等 API。这将完全取决于目标框架和实施作者的奇思妙想。