IMB*_*IMB 37 compression zip 7-zip
可能的重复:
为什么 ZIP 压缩不压缩任何东西?
我尝试 7zipping 一个 .exe 文件,但它实际上变大了。
这是预期的结果吗?
all*_*tic 80
它归结为一个叫做entropy的概念。参见维基百科。
基本思想是,如果存在总是可以使文件变小的压缩操作,那么逻辑规定所述压缩操作将能够将任何文件减少到 0 字节并仍然保留所有数据。但这是荒谬的,因为我们知道0字节根本不能传达任何信息。所以我们刚刚证明了不存在总是使输入更小的压缩算法,因为如果是这样的话,任何信息都可以存储在 0 字节中——但 0 字节意味着没有信息,所以你可以' t 同时拥有无信息和所有信息。因此,这是荒谬的。
由于这个理论概念,您使用过的每个压缩程序都会增加某些输入 的大小(或最多保持相同大小)。也就是说,对于您设计或使用的任何压缩算法,都会有某些输入会变小,而有些则不会。
已压缩的数据通常不适合进一步压缩,因为大多数无损压缩算法都基于相同的理论原理。它是能够进一步压缩性差压缩数据; 但这比从原始数据开始使用最佳可用算法简单地压缩它的效率要低。
例如,如果您有一个 100 MB 的文本文件并使用常规 Zip 算法对其进行压缩,则它可能会压缩到 50 MB。如果您随后使用 LZMA2 压缩 Zip 文件,您可能会将其压缩到 40 或 45 MB,因为 LZMA对大多数可压缩数据的压缩率比 Zip 高。所以它也可以压缩 Zip 数据是有道理的,因为 Zip 并没有完全吸收所有的熵。但是,如果您完全消除 Zip 容器,则可以通过使用 LZMA2 压缩原始文本来使其更小,可能会产生大约 30 - 35 MB 的大小(这些只是用于说明概念的“空气数字”) .
在您尝试压缩的二进制文件的情况下,它更大,因为 7-Zip 文件格式必须创建自己的内部结构并将已经压缩的可执行文件的数据打包成 7-Zip 格式。这包含诸如字典、文件头等内容。这些额外的数据通常被压缩数据本身的节省所抵消,但看起来你试图压缩的可执行文件已经用某种形式的 LZMA 压缩了;否则,它可能会缩小可执行文件的大小或稍微增加它,而不是增加 2 MB(很多)。
7z 中使用的底层压缩算法是无损的。这意味着您可以多次反复压缩-解压缩文件。此外,每次迭代后,文件将保持完全相同。
不幸的是,您不能期望多次应用无损压缩算法并始终获得积极的结果。有一个严格的界限,它不能跳过。粗略地说,这个边界取决于输入序列与随机数据的紧密程度。最重要的是,无损算法用于文件压缩、Internet HTML 数据传输、备份和其他期望将输出文件解压缩为完全相同的原始输入文件的操作。
与无损压缩相比,您可能总是期望在使用有损(或有损)压缩算法进行压缩后文件大小会减小。不利的一面是您无法在一次压缩-解压缩迭代后完全恢复原始文件。这些算法最著名的是音频/视频/图像传输和存储。
bzip2、LZMA、LZMA2等7z格式使用的算法都是无损的。因此会有一个限制,之后它就不能再压缩了。最重要的是,可执行映像 (.exe) 通常是高度压缩的文件。7zip和许多其他压缩工具一样嵌入了一些元数据,这实际上可以使输出文件更大。
在这种情况下,您将始终看到压缩文件小于输入文件。请参阅下面的评论,为什么这是不可能的。
归档时间: |
|
查看次数: |
17557 次 |
最近记录: |