什么是Varint

硅谷探秘者 算法基础 882 0 0

Varint 是一种紧凑的表示数字的方法。它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。

比如对于 int32 类型的数字,一般需要 4 个 byte 来表示。但是采用 Varint,对于很小的 int32 类型的数字,则可以用 1 个 byte 来表示。当然凡事都有好的也有不好的一面,采用 Varint 表示法,大的数字则需要 5 个 byte 来表示。从统计的角度来说,一般不会所有的消息中的数字都是大数,因此大多数情况下,采用 Varint 后,可以用更少的字节数来表示数字信息。下面就详细介绍一下 Varint。

Varint 中的每个 byte 的最高位 bit 有特殊的含义,如果该位为 1,表示后续的 byte 也是该数字的一部分,如果该位为 0,则结束。其他的 7 个 bit 都用来表示数字。因此小于 128 的数字都可以用一个 byte 表示。大于 128 的数字,比如 300,会用两个字节来表示:1010 1100 0000 0010

下图演示了 Google Protocol Buffer 如何解析两个 bytes。注意到最终计算前将两个 byte 的位置相互交换过一次,这是因为 Google Protocol Buffer 字节序采用 little-endian 的方式。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
official 580   BeanFactory一种“Spring容器”,BeanFactory翻译过来就Bean工厂,顾名思义,它可以用来创建Bean、获取Bean,BeanFactorySpring中非常核心的
official 642 ,BeanDefinitionSpring中非常核心的概念。BeanDefinition定义Bean的配置元信息接口,包含:Bean的类名设置父bean名称、否为primary、Bean行为配置信息,作用域、自动绑定模式
算法基础 1194 一、protobuf?在移动互联网时代,手机流量、电量最为有限的资源,而移动端的即时通讯应用无疑必须得直面这两点。解决流量过大的基本方法就使用高度压缩的通信协议,而数据压缩后流量减小带来的
数据结构与算法 3102 对于栈,一般来讲先进后出。而所谓单调栈则在栈的先进后出基础之上额外添加一个特性:从栈顶到栈底的元素严格递增(or递减)。那具体的进栈过程如下:1.对于单调递增栈,若当前进栈元素为e,从栈顶开
official 594   Bean生命周期描述的Spring中一个Bean创建过程和销毁过程中所经历的步骤,其中Bean创建过程重点。程序员可以利用Bean生命周期机制对Bean进行自定义加工。
java基础 1624 1.先看一下线程的生命周期转换图(学java的此图必背)本篇文章的主要目的不分析线程的各种状态之间的转换,而主要研究一下线程之间的通讯机制,以及Object的wait方法和notify方法。所以
weblog 4180 从计算机程序出现的第一天起,对效率的追求就程序天生的信仰,这个过程犹如一场没有终点,永不停歇的F1方程式竞赛,程序员车手,技术平台则在赛道上飞驰的赛车。---深入理解java虚拟机现在
official 765 根据前几篇的文章对bio、nio网络模型的叙述,我们可能大概已经了解了io网络模型的演化过程,以及在演化过程中的各个阶段各自解决了那些问题,以及如何提高性能的。随着select、poll
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。