这篇文章在你已经了解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编码过程
所以最终编码结果为 10000000 01100000,这样将4字节存储大小转化为2字节存储大小
目标:将10^32bit的二进制进行编码
proto文件格式
syntax = "proto3";
message Block {
repeated uint32 data = 1;
}
测试结果:
由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少