【问题标题】:Compressing ZIP file using a LZW compresion creates a too large size compressed file使用 LZW 压缩压缩 ZIP 文件会创建一个太大的压缩文件
【发布时间】:2013-10-21 10:57:29
【问题描述】:

我尝试使用 LZW 压缩方法压缩 zip 文件(代码在以下链接中提供),

http://rosettacode.org/wiki/LZW_compression#C

它创建的编码文件长度比原始文件大小太长,这是什么原因? 请任何人帮助我了解实时发生的事情。

【问题讨论】:

  • 什么,你试图压缩一个已经压缩的文件?这很可能会创建一个比原始文件更大的文件,因为它不能被进一步压缩,而且压缩器会将元数据添加到输出文件中。
  • 哪种方法更适合压缩任何二进制数据流?
  • 二进制无关。关键问题是 ZIP 压缩去除了(大部分)原始文件中的冗余数据,所以没有更多可压缩的了。
  • 如果您想使用自己的压缩方案(无论出于何种原因),请先解压缩原始数据,然后使用您自己的重新压缩。但请注意,任何现有的 LZW 库几乎肯定会超出您自己的代码的压缩率(使用正确的参数)。

标签: c compression zip 7zip lzw


【解决方案1】:

无损压缩不可能将每个文件压缩成更短的文件。

这是因为有 256N 个文件长度为 N 个字节,但有 (256N -1)/255 个短于 N 个字节的文件。所以不是每个文件都可以映射到更短的文件。

不仅如此,如果 any 文件变得更短,那么一些更短的文件必须放弃它的位置才能使之成为可能。所以有些文件必须变大。

无损压缩的工作原理是识别人类创建的典型文件中的常见模式,并将高概率的长字节序列转换为更短的序列。这样做的代价是一些序列变得更长。设计的目标是让典型文件压缩,但非典型文件必须变长。

如果压缩完成了工作,则会从文件中删除冗余信息,并且输出类似于随机数据。那么输出就不能被进一步压缩了。

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多