DDIA Thrift CompactProtocal 编码

问题描述 投票:0回答:1

当我阅读 DDIA 第 119 页时,我在 Trift CompactProtocol 中看到,当对可变长度的 int64 进行编码时。

示例取自 DDIA

要编码的以 10 为基数的数字:1337 它被编码为 1|111001|0 0|0010100

1st byte:  1|111011|0 ---> 
           the first 1 represents there are more data coming in after this byte
           then 111011 is the actual coding of 37 (i assuem they use little endian)
           the last 0 represent the sign +
2nd byte: 0|0010100

我的问题是,37和13如何编码为111011和0010100?他们不应该是100101和1101吗?谢谢你

我在网上搜索过,但似乎这很简单,没有人对此表示怀疑:(

encoding thrift
1个回答
0
投票

十进制

1337
是十六进制
0539
或二进制
0000010100111001

设计数据密集型应用程序BinaryProtocolThrift CompactProtocol有清晰、全面的解释和比较 Martin Kleppmann(第 4 章编码和进化)发现通过谷歌搜索的前三个链接DDIA“Thrift CompactProtocol”

Thrift CompactProtocol 编码在语义上等同于 BinaryProtocol,但正如您在图 4-3 中看到的,它打包了 相同的信息仅存入 34 个字节。它通过打包字段来做到这一点 将类型和标签号转换为单个字节,并使用可变长度 整数。它没有使用完整的八个字节来表示数字 1337,而是 以两个字节编码,每个字节的最高位用于 指示是否还有更多字节。这意味着

–64
63
之间的数字被编码在一个字节中,数字
–8192
8191
之间用两个字节编码,等等。更大 数字使用更多字节。

© www.soinside.com 2019 - 2024. All rights reserved.