前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >protobuf可变长度原理

protobuf可变长度原理

作者头像
潇洒哥和黑大帅
发布2018-12-24 11:21:22
1.3K0
发布2018-12-24 11:21:22
举报
文章被收录于专栏:WebDeveloperWebDeveloper

这篇文章在你已经了解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编码过程

  • 从二进制低字节(右边),开始7位分割 : 1100000 000000
  • 倒序: 0000000 1100000
  • 增加标识符位:10000000 01100000 1表示继续往后读取,0表示停止读取

所以最终编码结果为 10000000 01100000,这样将4字节存储大小转化为2字节存储大小

测试

目标:将10^32bit的二进制进行编码

proto文件格式

代码语言:javascript
复制
syntax = "proto3";
message Block {
    repeated  uint32 data = 1;
}

测试结果:

总结

由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可变长度类型
  • 连续位标识
  • 测试
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档