【发布时间】:2019-12-11 21:49:54
【问题描述】:
我想创建一个特定大小的 zip 文件,例如 10.000.000 字节。
假设我必须压缩多个文件,压缩后它们总计为 8.123.456 字节(随机数)。
我想添加“垃圾”以达到完全我选择的大小(在本例中为 10Mb)。
当然,我假设我必须压缩的文件不超过我的限制。
我对此没有任何特定的语言要求。
【问题讨论】:
标签: language-agnostic zip archive
我想创建一个特定大小的 zip 文件,例如 10.000.000 字节。
假设我必须压缩多个文件,压缩后它们总计为 8.123.456 字节(随机数)。
我想添加“垃圾”以达到完全我选择的大小(在本例中为 10Mb)。
当然,我假设我必须压缩的文件不超过我的限制。
我对此没有任何特定的语言要求。
【问题讨论】:
标签: language-agnostic zip archive
您可以在目标 Zip 文件内添加“垃圾”文件而不进行压缩。 添加的大小将是“垃圾”文件的大小,加上 76 个字节,再加上“垃圾”文件名称长度的两倍。一些压缩工具会在此基础上添加额外的元数据。
【讨论】:
只需连接一个“垃圾”文件和一个与您的 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 file length><zip file content><random data until size is as required>
您知道随机数据的数量,因为它是所需大小减去文件长度再减去文件长度表示的大小。
要解压,只需反转该过程即可。
【讨论】: