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。这将完全取决于目标框架和实施作者的奇思妙想。
我正在尝试创建一个数组,用于将数据从 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。这将完全取决于目标框架和实施作者的奇思妙想。