【问题标题】:How do varints take less space?varints 如何占用更少的空间?
【发布时间】:2020-04-25 08:28:48
【问题描述】:

我正在尝试了解 varints,我发现最好的东西就是 Google Protocol Buffers spec

在他们的例子中,他们表明这个数字1010 1100 0000 0010,当用变量编码时,是300,而不是44034

通常数字 300 占用两个字节 (1 0010 1100),但示例中的 300 也是如此。 varints 如何实际上比普通 int 占用更少的字节?

【问题讨论】:

    标签: int integer protocol-buffers varint


    【解决方案1】:

    300 通常占用两个字节,如果您使用 2 字节的固定格式来表示它。如果您使用 4 字节或 8 字节格式,则需要 4 字节或 8 字节。如果您使用的是 1 字节格式,则根本无法表示 300,除非您使用的是非常奇怪的编码。

    如果您想使用可变长度编码,那么标准 2 的补码表示是不够的,因为它没有长度信息。你不会知道数字停止的位置。您可以单独编码长度,但这会增加您的空间需求......或者您可以使用类似 protobuf varint 表示的东西,它可以表示 2 个字节中的 300 并且包含一个数字是完整的信号那时。

    (或者您可以使用许多其他编码中的一种。Protobuf 变体并非明确优于其他表示,即使在使用的空间方面也是如此。总有权衡。)

    【讨论】:

    • 所以,如果我理解的话,重点是要知道 int 在哪里结束?关键是你不知道int是2字节、3字节、4字节等等,但是现在有了这种编码技术,你真的知道了吗?
    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多