0

我有一个 gzip 压缩文件(100GB 未压缩 40GB 压缩)。现在我想修改一些字节/字节范围 - 我不想更改文件大小。

例如字节 8 + 10 和字节 5000 - 40000

在不重新压缩整个文件的情况下这可能吗?

斯特凡

4

3 回答 3

1

是否要更改文件大小没有区别(因为生成的 gzip 无论如何都不会根据原始文件大小进行布局),但是如果您将压缩文件拆分为多个部分,以便您要修改的部分处于隔离状态块,并使用多文件压缩方法而不是单文件 gzip 方法,您可以只更新更改的文件,而无需解压缩和压缩整个文件。

在您的示例中:

bytes1-7.bin        \
bytes8-10.bin        \ bytes.zip
bytes11-4999.bin     /
bytes5000-40000.bin /

然后你可以更新bytes8-10.binbytes5000-40000.bin但不能更新其他两个。但这是否会花费更少的时间是值得怀疑的。

于 2014-01-26T20:01:43.507 回答
0

一句话,没有。有必要用总比特数完全相同但内容不同的新块替换一个或多个放气块。如果使用 deflate 时新数据的可压缩性降低,这将变得不可能。即使它更可压缩,它也需要大量的手动操作来尝试使位匹配。而且它仍然可能是不可能的。

于 2014-01-27T05:21:41.930 回答
-1

gzip 的手册页说“如果您希望创建具有多个成员的单个存档文件,以便以后可以独立提取成员,请使用 tar 或 zip 之类的存档程序。” 我相信这意味着 gzip 压缩继续通过文件,因此是上下文相关的,因此不会允许你想要的。

解压缩/修补/重新压缩,或切换到数据的不同表示形式(可能是单独压缩文件的未压缩 tar 或 zip,因此您只需解压缩/重新压缩要更改的文件。)后者不会存储您的一般来说,数据是紧凑的,但这是您必须做出的权衡。

于 2014-01-26T18:53:22.023 回答