zip -1 a.zip file.test
zip -9 b.zip file.test
解压的话都是 unzip a/b.zip
有了解 zip 压缩算法的吗 -> 为啥解压时不用指定级别? 1. 是因为它真的不需要吗?(可以解释下吗) 2. 还是说它从压缩包里读出来了?(那 zipinfo 可以输出当时 zip 所用的级别吗)
1
cheng6563 2020-08-10 09:07:45 +08:00 via Android
用 zip 就是奔着速度而不是压缩率去的,所以没人设置这个了
|
2
sNullp 2020-08-10 09:09:03 +08:00
1 和 9 只是在压缩的时候用多复杂的字典和一些别的参数,从解压缩的角度来说算法是一样的。
|
3
tairan2006 2020-08-10 09:14:54 +08:00
这就跟你用 bcrypt 加密一样,10 遍或者 20 遍,只是计算量不一样,解密的时候都是同一个算法啊。
|
5
chenset 2020-08-10 09:31:43 +08:00 1
zip 格式文件头(文件的前几十字节)里面有一大段个描述信息的. 类似 TCP/HTTP 都是在文件头里面保存着很多这些参数
|
6
no1xsyzy 2020-08-10 13:57:31 +08:00 1
应该是没有存储具体值的,首先 zip 本身会表述算法,但子算法很可能不会表述
man zip ... -# ... Though still being worked, the intention is this setting will control compression speed for all compression methods. Currently only deflation is controlled. 可知 deflation 算法才可以控制 man zipinfo ... Finally, the sixth field indicates the compression method and possible sub-method used. 看得出具体的子算法是 `possible`,即推测出的。 实际上生成了 cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 100K | cat > file 然后 for i in {1..9}; do zip -$i v$i.zip file; done 测试的结果上来说, zipinfo 指示 v1..v2 是 defF,v3..v7 是 defN,v8..v9 是 defX,都是 deflation 算法。 压缩结果大小上来说,v1>v2=v3>v4=v5..=v9 diff 的结果,v8==v9,v4==v5==v6==v7 就这样吧 顺便一提,zip -v 显示 2008,zipinfo -v 显示 2009…… 十年没更新了…… |
7
impl 2020-08-10 14:51:27 +08:00 via Android
zip 只是封装格式,默认用 deflate 算法。
|
8
msg7086 2020-08-10 15:58:51 +08:00 1
压缩级别是指用多大的力气去从原始数据里抠掉冗余数据。
用视频压缩来举例子。比如说第一帧画面上有一只猫。第二帧这只猫往左移动了 1 像素。第三帧这只猫往左又往上移动了 1 像素。第四帧这只猫往左移动了 30 像素。 假如你的视频压缩算法没有动态搜索功能,那么每一帧都要单独画出一张猫来,就相当于 4 张图片连在一起,4 倍的大小。 假如你的算法能做上下和左右 1 像素的动态搜索,那么第二帧的图像就可以被搜索到是第一帧移动后的结果,那么第二帧就可以只保存残差而不需要保存完整的图片了。 假如你的算法能做上下左右和斜线 1 像素的动态搜索,那么第三帧的图像也可以搜索到动态矢量了。 假如你的算法能做整个画面所有像素的动态搜索,那么第四帧就算是差了 30 像素也可以搜索到动态矢量了。 第一种算法处理一下只要 5 毫秒,第二种要 10 毫秒,第三种要 20 毫秒,第四种要 1000 毫秒。 至于解码,当然只需要根据图片和动态信息来还原数据就行了,不管是差 1 像素还是差 30 像素,还原的过程都是一样的。 |