繁体   English   中英

Protobuf-来自同一类别的多个消息

[英]Protobuf - Multiple messages from the same class

我在proto文件中有以下消息

message User
required string name = 1;
required string password = 2;
  • 如何区分同一封邮件的多个实例?
  • 例如,如果我想序列化应用程序的注册用户
  • 是否指定了protobuf?

这仅适用于一些其他编码。 当protobuf从流中读取一条消息时,它不知道一条消息的长度。 它仅将字段流视为名称/值对,而没有指示消息开始或结束的指示符。

文档

如果要将多个消息写入单个文件或流,则由您来跟踪一条消息的结束位置和下一条消息的开始位置。 协议缓冲区连线格式不是自定界的,因此协议缓冲区解析器无法确定消息在何处结束。

Google的实现包含此用例的一些帮助程序类。 看一下CodedInputStreamCodedOutputStream

一种可能的书写方式:

  • 一个对象序列化到内存缓冲区
  • 使用CodedOutputStream将缓冲区的长度作为一个数字写入输出流
  • 将包含序列化对象的内存缓冲区添加到输出流
  • 继续下一个对象

一种可能的阅读方式:

  • 使用CodedInputStream从输入流中读取一个数字
  • 从输入流中提取尽可能多的字节(此数字指示该字节指向内存缓冲区)
  • 解析此缓冲区以重新获得一个对象
  • 如果输入流有更多字节,则继续下一个对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM