protobuf原理

2021-08-29  本文已影响0人  mafa1993

protobuf原理

压缩算法。字典法

  1. 有一些标识一些字符,例如用2标识为a。3标识为b等
  2. 解码,将标识符解码成二进制数据
  3. 进行编码后,message(name:xx,id:xxx)就会变成1:xx,2:xxx

protobuf生成过程

  1. protobuf把message转换成key-value存储,key和tag的转化公式 tag=(key<<3)|wirt_type
    • writ_type为数据类型的证书值
  2. value转换
    • 既不是大端也不是小端,会舍弃多余位数,int32类型的1只会占一个字节,而不是4个字节
    • 每个字节的第一位是个标识符,1代表后面还有数据要读,0表示到了结尾,存储时,先把后面的7位放到前面
    • 例如500 二进制数据为0001 1111 0100
    • protobuf存储为 1(标识位)110100(500的二进制后七位) 0(标识后面不可读了) 0000011(500从后往前溢出7位的部分)
    • 读取时,看到百世位是1,说明还有数据,继续读取,读取后面的放到前面
    • 存储时从后后往前读取 每七位加一个标识符存入一个字节
  3. tag长度不是固定,tag和value之间也没有分隔符
  4. 结构 tag1value1tag2value2
  5. 各种类型value组成
    • string : length+content
上一篇下一篇

猜你喜欢

热点阅读