1

我的程序需要读取多个 ZIP 档案并构造一个写入到 STDOUT 的 ZIP 输出流,该输出流最终写入网络套接字。由于输入已经是压缩的 ZIP 文件,我正在寻找一种方法来获取输入 ZIP 的已压缩文件/成员并将它们添加到流输出(以避免不必要地解压缩和重新压缩)。至于流输出,我需要在处理输入时将输出写入 1)避免将所有压缩数据保存在内存中,以及 2)保持数据流动以避免下游套接字超时。

Archive::Zip 模块具有通过 addMember() 将成员从 ZIP 存档复制到另一个存档的机制,大概不需要解压缩。Archive::Zip 也可以写入管道/套接字。但是我找不到增量写入;整个存档需要在写入之前在内存(或文件)中构建,这对于我正在处理的数据来说可能太大了。

IO::Compress::Zip 模块专注于生成我需要的流输出。但是没有明显的方法可以将我的输入 ZIP 存档中已经压缩的文件添加到输出流中。

我确信用 Archive::Zip 读取 ZIP,解压缩每个文件/成员,然后压缩它们并将它们写入 STDOUT,但这将是不必要的周期浪费和数据大小(千兆字节)我需要处理可能是一个很大的负担。

有什么优雅的方法可以做到这一点吗?

我错过了两个提及模块的功能吗?

4

1 回答 1

0

我认为没有 Perl 模块可以解决这个问题。但是,有一个名为的实用程序zipmerge可以执行此操作。 http://nih.at/libzip/zipmerge.html

它似乎是 libzip 发行版的一部分:http: //nih.at/libzip/index.html

于 2013-07-08T00:57:55.800 回答