protobuf变长编码

之前写过使用Protobuf的文章,参考链接

https://blog.csdn.net/zhtttyyzc/article/details/88554911

微信mmkv轻量级存储也用到Protobuf

那么Protobuf跟传统的json有哪些优势,又有哪些缺点呢

https://developers.google.com/protocol-buffers/docs/encoding

https://github.com/google/leveldb/blob/master/util/coding.cc

其实里面说的非常清楚,这里就简单的来说说

java中一个 int = 4个字节 = 4byte   1byte=8bit  俗称大B小b

150用2进制表示

0000 0000  0000 0000  0000 0000   1001 0110

都为0的话 先省略  好看点  留最后2字节

0000 0000   1001 0110

然后从右到左 每7位 插入msb标志 1表示还属于这个数字  往下继续识别  0则这个数字读取完了

因为Protobuf的算法是会让字节反转的 那么在反转前 插入msb

从右到左首先发现1   再插入msb数字1 那本身的1往前挪

00 0000 0001  1001 0110

去掉前面的0  反转 就生成了最终Protobuf传输的数据

1001 0110   0000 0001

 

再看文档上面150的解析

96 01 = 1001 0110  0000 0001
       → 000 0001  ++  001 0110 (drop the msb and reverse the groups of 7 bits)
       → 10010110
       → 128 + 16 + 4 + 2 = 150

这个int 150数字   用json传递  需要传递4个字节   但是pb只需要传递2个字节  效率快了一倍

如果int为1的话   二进制是0001  只需要传递1个字节  速度快了3倍

但是通过上面也知道pb比json多了一个步骤,解析字节

取舍看自己了

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值