protobuf原理
2021-08-29 本文已影响0人
mafa1993
protobuf原理
压缩算法。字典法
- 有一些标识一些字符,例如用2标识为a。3标识为b等
- 解码,将标识符解码成二进制数据
- 进行编码后,message(name:xx,id:xxx)就会变成1:xx,2:xxx
protobuf生成过程
- protobuf把message转换成key-value存储,key和tag的转化公式 tag=(key<<3)|wirt_type
- writ_type为数据类型的证书值
- value转换
- 既不是大端也不是小端,会舍弃多余位数,int32类型的1只会占一个字节,而不是4个字节
- 每个字节的第一位是个标识符,1代表后面还有数据要读,0表示到了结尾,存储时,先把后面的7位放到前面
- 例如500 二进制数据为0001 1111 0100
- protobuf存储为 1(标识位)110100(500的二进制后七位) 0(标识后面不可读了) 0000011(500从后往前溢出7位的部分)
- 读取时,看到百世位是1,说明还有数据,继续读取,读取后面的放到前面
- 存储时从后后往前读取 每七位加一个标识符存入一个字节
- tag长度不是固定,tag和value之间也没有分隔符
- 结构 tag1value1tag2value2
- 各种类型value组成
- string : length+content