perl - 将多个ZIP存档中的文件/成员合并为流式传输,单个ZIP存档输出

时间:2013-07-07 21:37:57

标签: perl streaming zip

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

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

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

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

有没有优雅的方法来实现这个目标?

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

1 个答案:

答案 0 :(得分:0)

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

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