创建具有精确固定大小的 zip
Create zip with a precise fixed size
我想创建一个特定大小的 zip 文件,例如 10.000.000 字节。
假设我必须压缩一些文件,压缩后它们总计 8.123.456 字节(随机数)。
我想添加 "rubbish" 以达到 正好 我选择的大小(在本例中为 10Mb)。
当然,我假设我必须压缩的文件不会超过我的限制。
我没有任何特定的语言要求。
将压缩数据打包到另一个格式如下的文件中:
<zip file length><zip file content><random data until size is as required>
你知道随机数据的数量,因为它是要求的大小减去文件长度减去文件长度表示的大小。
要解压缩,只需反向操作即可。
只需连接一个 "rubbish" 文件和一个与您的 10Mb 相匹配的有效 Zip 文件。
Zip 格式就是为这种情况而设计的。通常,您可以连接可执行文件和 Zip 文件以制作安装程序或自解压存档。
这里有一个例子(我连接了一个随机选择的 GIF 和一个 Zip)。 Info-Zip 解压缩工具说:
unzip -v appended.zip
Archive: appended.zip
warning [appended.zip]: 1772887 extra bytes at beginning or within zipfile
(attempting to process anyway)
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
186 Defl:N 140 25% 15.02.12 12:03 56202537 zip-ada/debg_za.cmd
349 Defl:N 202 42% 10.02.12 22:19 7718ccec zip-ada/debug.pra
4357 Defl:N 1381 68% 24.09.16 06:43 30f2fef0 zip-ada/demo/demo_csv_into_zip.adb
1015 Defl:N 513 50% 02.10.18 15:49 f0edcf97 zip-ada/demo/demo_unzip.adb
603 Defl:N 310 49% 20.03.16 08:26 b3906614 zip-ada/demo/demo_zip.adb
161483 Defl:N 39845 75% 27.08.16 16:35 9f24d1fe zip-ada/doc/appnote.txt
...
解压测试成功(符合预期):
unzip -t appended.zip
Archive: appended.zip
warning [appended.zip]: 1772887 extra bytes at beginning or within zipfile
(attempting to process anyway)
testing: zip-ada/debg_za.cmd OK
testing: zip-ada/debug.pra OK
testing: zip-ada/demo/demo_csv_into_zip.adb OK
testing: zip-ada/demo/demo_unzip.adb OK
testing: zip-ada/demo/demo_zip.adb OK
testing: zip-ada/doc/appnote.txt OK
testing: zip-ada/doc/lzma-specification.txt OK
...
No errors detected in compressed data of appended.zip.
您可以在 目标 Zip 文件中添加 "rubbish" 不压缩 文件。
添加的大小将是 "rubbish" 文件的大小加上 76 字节,再加上 "rubbish" 文件名长度的两倍。一些压缩工具在此之上添加额外的元数据。
我想创建一个特定大小的 zip 文件,例如 10.000.000 字节。
假设我必须压缩一些文件,压缩后它们总计 8.123.456 字节(随机数)。
我想添加 "rubbish" 以达到 正好 我选择的大小(在本例中为 10Mb)。
当然,我假设我必须压缩的文件不会超过我的限制。
我没有任何特定的语言要求。
将压缩数据打包到另一个格式如下的文件中:
<zip file length><zip file content><random data until size is as required>
你知道随机数据的数量,因为它是要求的大小减去文件长度减去文件长度表示的大小。
要解压缩,只需反向操作即可。
只需连接一个 "rubbish" 文件和一个与您的 10Mb 相匹配的有效 Zip 文件。 Zip 格式就是为这种情况而设计的。通常,您可以连接可执行文件和 Zip 文件以制作安装程序或自解压存档。
这里有一个例子(我连接了一个随机选择的 GIF 和一个 Zip)。 Info-Zip 解压缩工具说:
unzip -v appended.zip
Archive: appended.zip
warning [appended.zip]: 1772887 extra bytes at beginning or within zipfile
(attempting to process anyway)
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
186 Defl:N 140 25% 15.02.12 12:03 56202537 zip-ada/debg_za.cmd
349 Defl:N 202 42% 10.02.12 22:19 7718ccec zip-ada/debug.pra
4357 Defl:N 1381 68% 24.09.16 06:43 30f2fef0 zip-ada/demo/demo_csv_into_zip.adb
1015 Defl:N 513 50% 02.10.18 15:49 f0edcf97 zip-ada/demo/demo_unzip.adb
603 Defl:N 310 49% 20.03.16 08:26 b3906614 zip-ada/demo/demo_zip.adb
161483 Defl:N 39845 75% 27.08.16 16:35 9f24d1fe zip-ada/doc/appnote.txt
...
解压测试成功(符合预期):
unzip -t appended.zip
Archive: appended.zip
warning [appended.zip]: 1772887 extra bytes at beginning or within zipfile
(attempting to process anyway)
testing: zip-ada/debg_za.cmd OK
testing: zip-ada/debug.pra OK
testing: zip-ada/demo/demo_csv_into_zip.adb OK
testing: zip-ada/demo/demo_unzip.adb OK
testing: zip-ada/demo/demo_zip.adb OK
testing: zip-ada/doc/appnote.txt OK
testing: zip-ada/doc/lzma-specification.txt OK
...
No errors detected in compressed data of appended.zip.
您可以在 目标 Zip 文件中添加 "rubbish" 不压缩 文件。 添加的大小将是 "rubbish" 文件的大小加上 76 字节,再加上 "rubbish" 文件名长度的两倍。一些压缩工具在此之上添加额外的元数据。