什么是Varint
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 的方式。
评论区
请写下您的评论...
猜你喜欢
ofc
什么是BeanFactory
official
773
BeanFactory是一种“Spring容器”,BeanFactory翻译过来就是Bean工厂,顾名思义,它可以用来创建Bean、获取Bean,BeanFactory是Spring中非常核心的
official
828
,BeanDefinition是Spring中非常核心的概念。BeanDefinition是定义Bean的配置元信息接口,包含:Bean的类名设置父bean名称、是否为primary、Bean行为配置信息,作用域、自动绑定模式
算法基础
1459
一、什么是protobuf?在移动互联网时代,手机流量、电量是最为有限的资源,而移动端的即时通讯应用无疑必须得直面这两点。解决流量过大的基本方法就是使用高度压缩的通信协议,而数据压缩后流量减小带来的
blog
什么是单调栈?
数据结构与算法
3365
对于栈,一般来讲是先进后出。而所谓单调栈则是在栈的先进后出基础之上额外添加一个特性:从栈顶到栈底的元素是严格递增(or递减)。那么具体的进栈过程如下:1.对于单调递增栈,若当前进栈元素为e,从栈顶开
ofc
什么是Bean生命周期?
official
794
Bean生命周期描述的是Spring中一个Bean创建过程和销毁过程中所经历的步骤,其中Bean创建过程是重点。程序员可以利用Bean生命周期机制对Bean进行自定义加工。
java基础
1910
1.先看一下线程的生命周期转换图(学java的此图必背)本篇文章的主要目的不是分析线程的各种状态之间的转换,而主要是研究一下线程之间的通讯机制,以及Object的wait方法和notify方法。所以
ofc
为什么要学习数据结构与算法
weblog
4462
从计算机程序出现的第一天起,对效率的追求就是程序天生的信仰,这个过程犹如一场没有终点,永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。---深入理解java虚拟机现在是
official
1036
根据前几篇的文章对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
2024-08
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
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。