Google Protocol Buffer
由.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相关推荐
- 【C++】Google Protocol Buffer(protobuf)详解(一)
1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...
- Google Protocol Buffer 的使用和原理
FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...
- 由Google Protocol Buffer的小例子引起的g++编译问题
问题 学习 Google Protocol Buffer 的使用和原理时,提供了一个小例子,讲述了protobuf的使用方法. 假如已经有了如下文件: 其中writer.cpp如下: #include ...
- c++ java通信 protocol buffer,google protocol buffer (C++,Java序列化应用实例)
google protocol buffer (C++,Java序列化使用实例) 转载,请注明出处: http://blog.csdn.net/eclipser1987/article/details ...
- 只用2000行代码实现google protocol buffer c++版的功能
2019独角兽企业重金招聘Python工程师标准>>> google protocol buffer (下面简称gpb)功能强大,应用广泛,但在实际应用中,gpb需要写.proto脚 ...
- Google Protocol Buffer学习笔记(一)
概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf 1.下载protobuf的编 ...
- Google Protocol Buffer(GPB)使用之完全解析一:没有GPB的日子怎么过?
最近,我打算介绍一下一个好用的工具,即Google Protocol Buffer(GPB)的使用,这真的是一个非常有用的工具,你应该学它,并熟练使用它. 通常来讲,应该先介绍GPB是什么,但是,在这 ...
- linux下用google protocol buffer(gpb)出现的编译问题------前后耗掉1个多小时
平常没有用google protocol buffer(gpb)协议, 而是用的公司的私有化序列化工具. 最近刚好要用这个gpb, 于是搞了一把. 在工程中看了一下, 之前是有对应的gpb基础库的, ...
- Google Protocol Buffer 的使用和原理(c++)
简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...
最新文章
- ImageButton的坑 ImageButton 有问题
- 解决Linux安装 VMware tools 工具的方法
- 史上最纯洁的女孩,看到我实在被雷到了。
- dapper 连接mysql_如何在.NET中使用Dapper处理数据库连接?
- [mybatis]动态sql_sql_抽取可重用的sql片段
- WIFI无线路由器的五种工作模式
- oracle 触发器 insert 前检查_一文看懂INSTEAD OF 与AFTER 触发器区别与联系
- DeFi收益聚合协议Pickle Finance与APY Vision达成合作
- php validate验证用户,PHP validate 数据验证demo
- 随机数相加等于固定值_excel随机函数出来的数相加等于一个想要的固定值
- 2020 年百度之星#183;程序设计大赛 - 初赛一
- 初学Linux (Linux_note)
- 率先驶入广州,百度Apollo“整车无人”车队街头开跑
- 疫情推动下的云联络中心终于引起了销售行业的重视。
- python find_peaks 源码理解
- matlab实现A律13折线的编码和译码以及量化误差的计算
- Spring Cloud Zuul API 网关服务
- 阿里云服务器ECS添加数据盘
- 对数函数定义域和值域_对数函数的定义域、值域、定点
- 「Adobe国际认证」6 种配色方案,让一切设计都能完美无瑕?