google的Base 128 Varints编码

因为在读netty源码的时候涉及到了这种编码方式,所以就需要去了解一下。。。它是在protobuf里面的数字编码方式

其官方文档地址:https://developers.google.com/protocol-buffers/docs/encoding#varints


想要将它写一下是觉得这种编码方式在网络数据传输中确实挺有用的。。。

直接来将数据的decode吧,encode其实逆向一下也就出来了。。。

数据:10101011  01100001

上述是通过编码了之后的二进制数据,总共16位,2个字节。。。

(1)从前面的一个字节说起吧:10101011  最开始的位是1,那么它表示这个字节以后还有后续的字节。。。然后将最前面的1去掉,还剩下 0101011

(2)接下来看后面的一个字节:01100001  最开始的位是0,那么表示这个字节是最后一个字节了,以后没有更多的字节,那么去掉这个0之后还剩下 1100001


那么最后上面的二进制变成了 0101011   1100001  

然后首位顺序还需要颠倒一下,那么变成了1100001  0101011,用10进制来表示的话就是  12459


这算是一种变长的编码方式了,如果用它来编码头部,用于表示后续字节数的话确实可以方便按字节来读取网络数据。。

你可能感兴趣的:(google的Base 128 Varints编码)