Protobuf中的repeated V、map<K,V>序列化使用。

一、简单类型repeated

//定义message
message M_TEST
{repeated double dparams        =  1;  //double参数集repeated int32   iparams     =  2;  //int参数集string desc     =  99; //描述
}

简单类型repeated,可以通过add_<参数名>(参数值)的方式设置值,再进行序列化;

M_TEST testpacket;
testpacket.set_desc("Demo");int i = 0;
do{double di = i + 0.001;testpacket.add_iparams(i);testpacket.add_dparams(di);i++;
} while (testpacket.ByteSize() < 1024);//填充测试数据//序列化
string strpb;
testpacket.SerializeToString(&strpb);

二、对象类型repeated

//定义协议1
message M_Person
{string         name    = 1;    //姓名int32      age     = 2;    //年龄
}//定义协议2
message M_Team
{repeated    M_Person    member      =    1;    //成员信息string      desc        =    99;   //描述
}

对象类型repeated,可以通过add_参数名()的方式设置值,再进行序列化;

M_Team teampacket;
M_Person *person;teampacket.set_desc("Demo");
person = teampacket.add_member();
person->set_name("张三");
person->set_age(33);string strpb;
teampacket.SerializeToString(&strpb);

三、多层嵌套与map<K,V>使用示例

1)协议主体示例如下:

//围棋竞赛详情
message M_Battle
{repeated    M_GroupInfo    junior    =    1;    //初中队repeated    M_GroupInfo    senior    =    2;    //高中队map<string,M_GroupInfo>    teacher   =    3;    //教师队string         desc      =    99;   //描述
}//队伍成员信息
message M_GroupInfo
{string        nickname    =    1;    //昵称E_Gender      gender      =    2;    //性别M_Project     project     =    3;    //参赛项目string        desc        =    99;   //描述
}//竞赛项目信息
message M_Project
{int32         id          =    1;    //项目IDstring        name        =    2;    //项目名称string        desc        =    99;   //项目描述
}//性别
enum E_Gender
{GENDER_UNKNOWN            =    0;    //未知GENDER_MALE               =    1;    //男性GENDER_FEMALE             =    2;    //女性
}

2)map与repeated使用示例如下:

M_Battle battlepacket;//M_Battle变量teacher:处理map类型
auto* wMap = battlepacket.mutable_teacher();
for (int i = 1; i <= 3; i++){M_GroupInfo group_teacher;//M_GroupInfo变量nicknamegroup_teacher.set_nickname("fuzi" + to_string(i));//M_GroupInfo变量gendergroup_teacher.set_gender(GENDER_UNKNOWN);//M_GroupInfo变量projectM_Project *project_teacher = new M_Project();project_teacher->set_id(i);project_teacher->set_name("teacher project" + to_string(i));project_teacher->set_desc("This is teacher project " + to_string(i));group_teacher.set_allocated_project(project_teacher);//M_GroupInfo变量descgroup_teacher.set_desc("This is group_teacher member " + to_string(i));//添加到map键值string key = "teacher" + to_string(i);(*wMap)[key] = group_teacher;
}//M_Battle变量desc:基础类型
battlepacket.set_desc("Demo");//M_Battle变量junior, senior
int i = 1;
do{M_GroupInfo* group_junior;M_GroupInfo* group_senior;M_Project *project_junior = new M_Project();M_Project *project_senior = new M_Project();project_junior->set_id(i);project_junior->set_name("junior project " + to_string(i));project_junior->set_desc("This is junior project " + to_string(i));project_senior->set_id(i*2);project_senior->set_name("senior project " + to_string(i));project_senior->set_desc("This is senior project " + to_string(i));group_junior = battlepacket.add_junior();group_junior->set_nickname("zhangsan" + to_string(i));group_junior->set_gender(GENDER_MALE);group_junior->set_allocated_project(project_junior);group_junior->set_desc("This is group_junior member " + to_string(i));group_senior = battlepacket.add_senior();group_senior->set_nickname("lisi" + to_string(i));group_senior->set_gender(GENDER_FEMALE);group_senior->set_allocated_project(project_senior);group_senior->set_desc("This is group_senior member " + to_string(i));i++;} while (battlepacket.ByteSize() < 1024);//填充数据//序列化
int size = battlepacket.ByteSize();
void *p = malloc(size);
battlepacket.SerializeToArray(p, size);//或序列化
//string strpb;
//battlepacket.SerializeToString(&strpb);

c++ protobuf中repeated类型使用——序列化相关推荐

  1. protobuf中 repeated[Ptr]Field的序列化

    message Test1 {required int32 a = 1; }Test1 t1; t1.set_a(150); 序列化之后的结果是 08 96 01. 其中08 >>3 == ...

  2. protobuf repeated类型的使用

     protobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多.通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列 ...

  3. 区分 Protobuf 中缺失值和默认值

    转载地址:区分 Protobuf 中缺失值和默认值 - 知乎 Protobuf 是目前非常主流的二进制序列化格式,GRPC 默认使用 Protobuf v3 格式,下面是 Protobuf 消息定义的 ...

  4. grpc java 泛型_gRPC中Any类型的使用(Java和NodeJs端)

    工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...

  5. 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    问题背景: 在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符 ...

  6. C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法...

    C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法 原文:C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决 ...

  7. 客户端访问Web Service--参数类型的序列化与反序列化(一)

    最近开始着手学习ASP.NET AJAX,在园里看了很多关于这方面的文章,自己也曾买了关于ASP.NET AJAX的书籍,本文我将借鉴于老赵的WebCast深入浅出系列课程第五讲以记学习笔记的形式和大 ...

  8. java高级用法之:在JNA中使用类型映射

    文章目录 简介 类型映射的本质 TypeMapper NativeMapped 总结 简介 JNA中有很多种映射,library的映射,函数的映射还有函数参数和返回值的映射,libary和函数的映射比 ...

  9. POJO 类中布尔类型为啥不让用 isXxx 命名

    一.代码问题重现 想要使用json串在服务间传递信息时,我们会先定义一个POJO类,该类中包含是否删除属性isDeleted,代码如下 /** * @author wenxuan wang */ @D ...

  10. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

最新文章

  1. 神经网络防止过拟合的方法
  2. seo建设者_前5名最佳免费和付费网站建设者
  3. PyQt5 笔记2 -- Qt Designer使用
  4. java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?
  5. C/C++插入数据到Mysql数据库中
  6. 在idea中使用CheckStyle来规范代码
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的今日头条新闻网站
  8. mysql.sys用户权限_MySQL用户及权限小结
  9. 【洛谷 P2764】 最小路径覆盖问题(最大流)
  10. 主成分分析法原理与MATLAB实现
  11. python输出斐波那契数列_Python实现斐波那契数列
  12. win7取消计算机密码怎么设置,Windows7取消开机密码怎么设置_Win7怎么取消开机密码?-192路由网...
  13. 2019烟台计算机副高职称报名时间,烟台市公共企事业单位信息公开 政策文件 2019年度职称评审工作日程安排...
  14. 早早起来真的可以做许多事,比如再睡一觉
  15. 专业查苹果测试软件,电池寿命检测软件苹果版-iphone查电池寿命appv2.1.5 iOS版-腾牛苹果网...
  16. excel表格如何换行
  17. 微信小程序iphone7设备下跳转h5页面失败,h5页面显示白屏,加载报错,其他页面正常显示
  18. MySQL数据库有哪些特点
  19. git一直输入用户名和密码的解决方法remote: HTTP Basic: Access denied fatal: Authentication failed for
  20. 我走过最长的路,就是XMX的套路

热门文章

  1. 51单片机——八段数码管
  2. J-LINK 软件下载地址
  3. 自动弹出 微信授权登录窗口
  4. SINR, RSRP, CQI 关系
  5. 《孙子兵法》对现代战争还适用吗?为什么?
  6. EduCoder-Hive表DDL操作(一、二)答案-路漫漫远俢兮
  7. html5取消backspace后退功能,JS禁止后退键(Backspace)详解
  8. html学习——介绍
  9. Groq:从头设计一个张量流式处理器架构
  10. Mac ssh locahost Connection refused