【问题标题】:Deflate Format: differences between type blocksDeflate 格式:类型块之间的差异
【发布时间】:2018-11-10 21:08:49
【问题描述】:

我目前正在尝试编写与 RFC Deflate 规范具有相同目的的压缩器和解压缩器。

我无法理解在使用固定表和动态表进行压缩时块的组合方式之间的区别。该文件由 LZ77 处理生成(distance, length) + literal

  • 我如何知道块的类型?
  • 我必须压缩这些数据吗?
  • 鉴于我使用固定压缩并且不必发送表,编码器如何知道如何对数据进行编码?
  • 此外,我必须在实际压缩执行之前发送数据吗?

我对固定表和我们在动态模式下发送的表之间的区别以及这两个块如何使用它们来编码数据感到困惑。

我目前正在阅读数据压缩:完整参考。任何建议都会有所帮助。

【问题讨论】:

    标签: c deflate


    【解决方案1】:

    由于您尝试压缩,因此您会选择两者中较小的一个。 zlib 的 deflate 计算固定块、动态块和存储块的大小,并发出三者中最小的。

    如果您对固定块进行编码,则使用固定代码进行文字/长度和距离编码。此代码在 RFC 中提供。

    【讨论】:

    • 嗨,马克!我非常感谢您的回答,但我还有一个问题。 Deflate 实际上是如何计算两个块的大小的?他必然需要模拟两种编码,然后评估最好的编码是什么?我在说蠢话?
    • 是的。 zlib 计算所有三个的大小:动态、静态和存储,并选择最小的。
    • 好的!我还有一个疑问……这一次是关于压缩代码长度的方式。在顺序(16,17,18..)的 3 位 cls 序列之后,我可以创建用于下一​​个用代码长度字母编码的代码序列的代码和树。我的问题是:我必须编码所有可能的符号代码长度还是只编码真正使用的代码数量?因为我的问题涉及解压缩器如何知道哪些代码长度分配用于为实际数据创建下一个代码和树的符号。
    • 评论不是提问和回答的地方。你应该问一个新问题。
    • 当然!我会做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2014-01-03
    • 1970-01-01
    • 2019-05-12
    • 2019-08-10
    • 2016-09-20
    • 2021-11-12
    相关资源
    最近更新 更多