message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
以上是Google Protocol Buffer教程中提到的addrbook.proto文件的片段。 要求是,正在开发的应用程序将需要解码从套接字接收的二进制数据。例如,名称,id和电子邮件表示为二进制数据。 现在,id可以读作整数。但我真的不确定如何阅读名称和电子邮件,因为这两个可能是不同的长度。 (不幸的是,在这两个字段之前我没有得到前缀的长度) 预计应用程序将从各种来源读取这些数据。我们的目标是为源自这些源的不同类型的数据制作解码器/适配器。然后也可能有来自同一来源的不同类型的消息。 提前致谢
答案 0 :(得分:1)
但我真的不确定如何读取名称和电子邮件,因为这两个可能是不同的长度。
像protobuf这样的序列化程序的全部内容是你不需要担心。具体来说,在protobuf的情况下,字符串总是以字节长度为前缀(使用UTF-8编码和长度的varint编码)。
不幸的是,我没有在这两个字段之前加上前缀
然后你没有处理protobuf数据。 Protobuf是一种特定的数据格式,与xml或json是数据格式的方式相同。任何涉及“协议缓冲区”的对话只有在您实际讨论protobuf格式或数据序列化使用该格式时才有意义。
协议缓冲区不是任意数据处理API。它不允许您处理protobuf以外的任何格式的数据。
答案 1 :(得分:0)
听起来你可能正试图手动重新实现Protocol Buffers;你不需要这样做(虽然我相信它会很有趣)。作为Protocol Buffers项目的一部分,Google提供了C,Java和Python实现,以protobuf格式序列化和反序列化内容。