Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用LZW压缩压缩压缩ZIP文件会创建过大的压缩文件_C_Compression_Zip_7zip_Lzw - Fatal编程技术网

C 使用LZW压缩压缩压缩ZIP文件会创建过大的压缩文件

C 使用LZW压缩压缩压缩ZIP文件会创建过大的压缩文件,c,compression,zip,7zip,lzw,C,Compression,Zip,7zip,Lzw,我尝试使用LZW压缩方法压缩zip文件(下面的链接中提供了代码) 它创建的编码文件长度比原始文件大小太长,原因是什么? 请任何人帮助我了解实时发生的情况。无损压缩不可能将每个文件压缩为较短的文件 这是因为有256N个文件的长度为N字节,但有(256N-1)/255个文件的长度小于N字节。因此,并非每个文件都可以映射到较短的文件 更重要的是,如果任何文件变短,那么一些较短的文件必须放弃它的位置以使之成为可能。所以一些文件必须变大 无损压缩的工作原理是识别人类创建的典型文件中的常见模式,并将长概率

我尝试使用LZW压缩方法压缩zip文件(下面的链接中提供了代码)

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

无损压缩不可能将每个文件压缩为较短的文件

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

更重要的是,如果任何文件变短,那么一些较短的文件必须放弃它的位置以使之成为可能。所以一些文件必须变大

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


如果压缩完成了它的工作,冗余信息将从文件中删除,并且输出类似于随机数据。那么输出就无法进一步压缩。

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