message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
上面是 Google Protocol Buffer 教程中提到的 addrbook.proto 文件的片段。 要求是,正在开发的应用程序需要解码从套接字接收到的二进制数据。例如,表示为二进制数据的姓名、ID 和电子邮件。 现在,id 可以作为整数读取。但我真的不知道如何读取姓名和电子邮件,因为这两个长度可以是可变的。 (不幸的是,我没有在这两个字段之前获得长度前缀) 应用程序需要从各种来源读取此类数据。我们的目标是为源自这些来源的不同类型的数据制作解码器/适配器。那么同一来源也可能有不同类型的消息。 提前致谢
最佳答案
But I am really not sure how to read name and email considering that these two can be of variable lengths.
像 protobuf 这样的序列化器的全部意义在于,您无需担心这一点。具体来说,在 protobuf 字符串的情况下,始终以其字节长度为前缀(使用 UTF-8 编码和长度的 varint 编码)。
And unfortunately, I do not get lengths prefixed before these two fields
那么您没有处理 protobuf 数据。 Protobuf是一种特定的数据格式,就像xml或json是一种数据格式一样。任何涉及“ Protocol Buffer ”的对话只有在您实际讨论 protobuf 格式或使用该格式序列化的数据时才有意义。
Protocol Buffer 不是任意数据处理 API。它不允许您处理除 protobuf 之外的任何格式的数据。
关于java - 关于 Google Protocol Buffer 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407383/