将多个ZIP档案中的文件/成员合并为流式、单个ZIP档案输出



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

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

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

我相信用Archive::ZIP读取ZIP,解压缩每个文件/成员,然后压缩它们并将它们写入STDOUT是可行的,但这将是不必要的循环浪费,而且我需要处理的数据大小(GB)可能是一个很大的负载。

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

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

我不认为有Perl模块可以实现这一点。然而,有一个名为zipmerge的实用程序可以做到这一点。http://nih.at/libzip/zipmerge.html

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

最新更新