这篇文章在你已经了解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编码过程
所以最终编码结果为 1 0000000 0 1100000,这样将4字节存储大小转化为2字节存储大小
测试
目标:将10^32bit的二进制进行编码
proto文件格式
syntax = "proto3";
message Block {
repeated uint32 data = 1;
}
测试结果:
总结
由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少
以上所述就是小编给大家介绍的《protobuf可变长度原理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!