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

时间:2017-12-06 18:29:56

标签: java c++ protocols protocol-buffers

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

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

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

message Config {
    repeated string types = 1;
}

我想我错过了一些事情!

1 个答案:

答案 0 :(得分: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,有效负载一个接一个地猛击。在一些原始类型的情况下 - 整数等,有一个"打包"通过预先填充整个数组的字节长度,然后只将数组内容作为原始非标记化数据添加,从而消除每个元素标题的编码。

如果你的意思是来自调用者的观点,那么:它取决于实现,但基本上你应该期待一些熟悉的API - 这是常见的框架。这可能意味着repeated数据作为数组/向量公开,或者它可能意味着"集合"具有Add等API的类。它完全取决于目标框架和实施作者的奇思妙想。