由.proto文件生成C++的相关文件时,一个对应的的类和相关功能的对应关系如下:

Varint的相关实现(节省大小,小的数字从4个字节变为一个字节):

对于编码,遇到的第一个字节,需要检查高位,如果高位为0,说明这个最后个byte,使用剩余的7位标识真实的值,在这种情况下,最大表示的值是2^7(128),超过128的数,至少需要使用两个字节。

对于key-value的实现,比如上面使用varint编码完后,对应的是Value字段,对于key字段,使用的是
(field_number << 3) | wire_type
wire_type的表示:

所以对于:

message LogonReqMessage {
required int64 acctID = 1;
required string passwd = 2;
}

LogonReqMessage message;

message.set_acctid(300);
message.set_passwd("hello");
编码后的结果:

acctID:
Key: 0x08 ->(1<<3 | 0)
Value: 0xac 0x12-> 1010 1100 0000 0010 ->300

Passwd:
Key:0x12 ->(2<<3 |2)
Value:0x05(个数) 0x68 0x65 0x6c 0x6c 0x6f->hello

这里可以看到,使用field_number的目的是可以显示的标识一个字段,这样的话可以在两边声明不一致的时候,最大可能的保持兼容,只要能在被序列化的一端找到相关的number就可以解码,同时对于repeated字段,可以显示的表示当前内存所对应的字段,如果将passwd 改为repeated,并设置两个值(12 05 … 12 05…):

转载于:https://www.cnblogs.com/llluiop/p/6687349.html

Google Protocol Buffer相关推荐

  1. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  2. Google Protocol Buffer 的使用和原理

    FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...

  3. 由Google Protocol Buffer的小例子引起的g++编译问题

    问题 学习 Google Protocol Buffer 的使用和原理时,提供了一个小例子,讲述了protobuf的使用方法. 假如已经有了如下文件: 其中writer.cpp如下: #include ...

  4. c++ java通信 protocol buffer,google protocol buffer (C++,Java序列化应用实例)

    google protocol buffer (C++,Java序列化使用实例) 转载,请注明出处: http://blog.csdn.net/eclipser1987/article/details ...

  5. 只用2000行代码实现google protocol buffer c++版的功能

    2019独角兽企业重金招聘Python工程师标准>>> google protocol buffer (下面简称gpb)功能强大,应用广泛,但在实际应用中,gpb需要写.proto脚 ...

  6. Google Protocol Buffer学习笔记(一)

    概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...

  7. 前端后台以及游戏中使用Google Protocol Buffer详解

    前端后台以及游戏中使用Google Protocol Buffer详解 前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf 1.下载protobuf的编 ...

  8. Google Protocol Buffer(GPB)使用之完全解析一:没有GPB的日子怎么过?

    最近,我打算介绍一下一个好用的工具,即Google Protocol Buffer(GPB)的使用,这真的是一个非常有用的工具,你应该学它,并熟练使用它. 通常来讲,应该先介绍GPB是什么,但是,在这 ...

  9. linux下用google protocol buffer(gpb)出现的编译问题------前后耗掉1个多小时

    平常没有用google protocol buffer(gpb)协议, 而是用的公司的私有化序列化工具. 最近刚好要用这个gpb, 于是搞了一把. 在工程中看了一下, 之前是有对应的gpb基础库的, ...

  10. Google Protocol Buffer 的使用和原理(c++)

    简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...

最新文章

  1. ImageButton的坑 ImageButton 有问题
  2. 解决Linux安装 VMware tools 工具的方法
  3. 史上最纯洁的女孩,看到我实在被雷到了。
  4. dapper 连接mysql_如何在.NET中使用Dapper处理数据库连接?
  5. [mybatis]动态sql_sql_抽取可重用的sql片段
  6. WIFI无线路由器的五种工作模式
  7. oracle 触发器 insert 前检查_一文看懂INSTEAD OF 与AFTER 触发器区别与联系
  8. DeFi收益聚合协议Pickle Finance与APY Vision达成合作
  9. php validate验证用户,PHP validate 数据验证demo
  10. 随机数相加等于固定值_excel随机函数出来的数相加等于一个想要的固定值
  11. 2020 年百度之星#183;程序设计大赛 - 初赛一
  12. 初学Linux (Linux_note)
  13. 率先驶入广州,百度Apollo“整车无人”车队街头开跑
  14. 疫情推动下的云联络中心终于引起了销售行业的重视。
  15. python find_peaks 源码理解
  16. matlab实现A律13折线的编码和译码以及量化误差的计算
  17. Spring Cloud Zuul API 网关服务
  18. 阿里云服务器ECS添加数据盘
  19. 对数函数定义域和值域_对数函数的定义域、值域、定点
  20. 「Adobe国际认证」6 种配色方案,让一切设计都能完美无瑕?

热门文章

  1. dos 初始化 mysql数据库_DOS下的MySQL数据库基本操作
  2. golang 所有进程休眠_Golang基础--常见坑
  3. 追加docker已运行容器添加或修改端口映射方法
  4. 以管理员权限运行程序需注意
  5. 企业级SpringBoot教程 (十)用spring Restdocs创建API文档
  6. Linux服务器安全简明指南
  7. 手机通讯加密软件Peerio上架,代码全部开源
  8. 修路方案(次小生成树)
  9. 页面的title为乱码的话需要修改jsp页面pageEncoding=UTF-8
  10. LeetCode数据库 180. 连续出现的数字