首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Protobuf -来自同一类的多条消息

Protobuf -来自同一类的多条消息
EN

Stack Overflow用户
提问于 2017-10-11 09:32:07
回答 1查看 662关注 0票数 0

我在proto文件中有以下消息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
message User
required string name = 1;
required string password = 2;
  • 如何区分同一消息的多个实例?
  • 例如,如果我想序列化应用程序的注册用户
  • 原型机有说明吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 10:22:59

这只适用于一些额外的编码。当protobuf从流中读取消息时,它不知道一条消息的长度。它将字段流简单地看作是名称/值对,而不是消息开始或结束的指示符。

来自文档

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

Google的实现包含了一些用于这个用途的助手类。看看CodedInputStreamCodedOutputStream

一种可能的写作方式:

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

一种可能的阅读方式:

  • 使用CodedInputStream从输入流读取一个数字
  • 从输入流获取与内存缓冲区所指示的字节数相同的字节。
  • 解析此缓冲区以重新获得一个对象
  • 如果输入流有更多的字节,则继续下一个对象。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46694301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文