我有一个4.7 Gb文件,我想存储和移动。它位于Windows 2012服务器上。
当我使用高级文件选项“压缩以节省磁盘空间”时,操作系统能够将其减少到3.013 GB,或原始大小的64%。当它坐在服务器上时这很好。
我不得不移动它,所以我使用了我最喜欢的(90年代)压缩工具gzip,它减少到2.294 Gb,或原始尺寸的48.7%。
问题:
为什么90年代的“gzip”能够制作文件,其占用空间是Windows 2012压缩的75%?这是关于“开放时间”吗?这是一个开源具有封闭源中不存在的性能的地方吗?是什么给了什么?
答案 0 :(得分:1)
他们正在做不同的事情。
NTFS压缩必须支持随机访问,包括将和数据读取到压缩文件的中间或开头,
a)可能不像之前的数据那样可压缩(因此所有后来的数据都必须移动)
b)将使用于压缩文件其余部分的字典无效(因此需要重写所有字典)
使用GZIP也意味着如果您希望读取文件的最后十个字节,则必须首先解压缩整个文件,以使压缩字典处于正确的状态。
因此,NTFS以较小的块压缩文件,并且不会利用文件中广泛分离的部分之间的相似性来增加压缩。
答案 1 :(得分:0)
我不知道内幕,但我愿意打赌Windows和GZip都使用相同的Deflate压缩算法。 https://en.wikipedia.org/wiki/DEFLATE
以下是我想象中的差异:
Deflate的压缩设置为0-9,其中0表示无压缩,9表示最佳压缩。中间的所有值都具有速度与压缩的折衷。当Windows正在压缩您的驱动器时,它可能正在使用他们确定的设置,当您需要打开文件时,它在速度方面是一个很好的折衷。
我知道你说你在单个文件上运行,但是当人们提出这个问题时,通常是因为GZip在一个文件上运行。这就是它通常与Tar结合使用的原因。压缩单个文件总是比单独压缩多个文件更有优势(如.zip)。