Protobuf 介绍与实战50:Varint 正数编码过程、负数编码过程、解码过程介绍
1 go grpc-go 相关技术专栏 总入口
2 Protobuf介绍与实战 图文专栏 文章目录
1、Varint编码方式,适合的场景? |
适合对正数进行编码
不适合负数。
2、正数的Varint编码过程,如下(举个例子说明) |
假设传输的是1029,类型为int32
int32类型的1029,如果使用Varint编码的话,
在64位操作系统下,需要使用4个字节传输,其中2个字节是无需的;
使用Varint编码后,只需要2个字节传输即可。
下面是1029为uint32类型时的情况:
3、负数的Varint编码过程: |
假设对-129进行Varint编码,类型为int64位
传输-129,需要8个字节
3.1、第1步:计算出-129的补码 |
3.2、第2步:对-129的补码,进行Varint编码 |
3.3、验证 |
发现了没,-129用Varint编码后,居然需要10个字节;
这跟我们的初衷是违背的。
我们用Varint编码的目的是,希望节省字节的;
看来,Varint编码不适用于负数场景。
那么,为了解决负数的场景,在Varint的基础上,增加了ZigZag编码。
ZigZag编码方式,下文再详细介绍。
4、Varint编码的解码过程? |
主要解码过程:(就是编码的反过程而已)
与50位技术专家面对面 20年技术见证,附赠技术全景图