java - 关于 Google Protocol Buffer 的查询

标签 java protocol-buffers

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/

相关文章:

java - Java 中的通用返回类型

java - ListView 用完了显示字符串的空间

go - 将 protobuf 与 golang 结合使用并处理 []byte HTTP 响应正文

c++ - 混淆 google protobuf 字段

protocol-buffers - 如何从 ONNX 模型中读取各个层的权重和偏差值?

java - 虚拟机优化

java - 如何在接口(interface)中使用泛型方法参数?

java - 在文本区域中显示控制台信息

c++ - Protocol Buffer 错误版本

c++ - 关于 Google 的 protobuf