protobuf可变长度原理

2018-12-03  本文已影响12人  老苗

这篇文章在你已经了解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,编码结果大小相应减少

上一篇 下一篇

猜你喜欢

热点阅读