为什么 gzip 在 windows 2012 中优于压缩文件

why is gzip better than compressed files in windows 2012

我有一个 4.7 Gb 的文件想要存储和移动。它位于 Windows 2012 服务器上。

当我使用高级文件选项 "compress to save disk space" 时,OS 能够将其减少到 3.013 GB,或原始大小的大约 64%。当它坐在服务器上时,这很好。

我不得不移动它,所以我使用了我(90 年代)最喜欢的压缩工具 gzip,它被压缩到 2.294 Gb,大约是原始大小的 48.7%。

问题:
为什么 90 年代的 "gzip" 能够制作出占用空间是 windows 2012 压缩空间的 75% 的文件?这是关于 "opening time" 的吗?这是开源软件具有闭源软件所没有的性能的地方吗?给出了什么?

我不知道内部结构,但我敢打赌 Windows 和 GZip 都使用相同的 Deflate 压缩算法。 https://en.wikipedia.org/wiki/DEFLATE

我认为这是造成差异的原因:

  1. Deflate 的压缩设置为 0-9,其中 0 为无压缩,9 为最佳压缩。中间的所有值都在速度与压缩之间进行权衡。当 windows 正在压缩您的驱动器时,它可能正在使用他们确定的设置,当您需要打开文件时,在速度方面是一个很好的权衡。

  2. 我知道您说您是在对单个文件进行操作,但是当人们问这个问题时,通常是因为 GZip 对单个文件进行操作。这就是它通常与 Tar 结合使用的原因。压缩单个文件总是比单独压缩多个文件更有优势(如 .zip)。

他们在做不同的事情。

NTFS 压缩必须支持随机访问,包括读取 和写入 数据到压缩文件的中间或开头,

a) 可能不像以前的数据那样可压缩(所以所有后来的数据都必须移动)

b) 将使用于压缩文件其余部分的字典无效(因此需要重写)

使用 GZIP 还意味着如果您希望读取文件的最后十个字节,则必须首先解压缩整个文件,以使压缩字典进入正确状态。

因此 NTFS 以较小的块压缩文件,并且不利用文件中相距很远的部分之间的相似性来提高压缩率。