内容简介:这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章官网说明地址:proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64
这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章 【golang-protobuf使用】
可变长度类型
官网说明地址: https://developers.google.com/protocol-buffers/docs/proto3
proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64
连续位标识
Protobuf 用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后读。每个字节低7位用于实际的编码。
举例:
本次举例使用uin32类型
十进制:300
二进制(4个字节):00000000 00000000 00000001 1000000
protobuf编码过程
-
从二进制低字节(右边),开始7位分割 : 1100000 000000
-
倒序: 0000000 1100000
-
增加标识符位: 1 0000000 0 1100000
1表示继续往后读取,0表示停止读取
所以最终编码结果为 1 0000000 0 1100000,这样将4字节存储大小转化为2字节存储大小
测试
目标:将10^32bit的二进制进行编码
proto文件格式
syntax = "proto3"; message Block { repeated uint32 data = 1; }
测试结果:
总结
由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少
以上所述就是小编给大家介绍的《protobuf可变长度原理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- python – 可变长度的numpy recarray字符串
- 集合对象可变与不可变的那点事
- Python中不可变数据类型和可变数据类型
- C 可变长参数 VS C++11 可变长模板
- memcached对key和value的限制 memcached的key最大长度和Value最大长度
- Haskell长度图说明?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。