gpt4 book ai didi

perl - Archive::Zip 和 IO::Uncompress::Unzip 之间有什么区别

转载 作者:行者123 更新时间:2023-12-02 01:39:23 25 4
gpt4 key购买 nike

我是 Perl 编程新手。

我有一个 8GB 的​​ zip 文件,其中包含数据文件和元数据文件。目标是读取元数据文件的内容以与 zip 中的数据文件名进行比较。

当前的实现是使用IO::Uncompress::Unzip,读取元数据文件~60KB需要太长时间(~15分钟)。

我使用 Archive::Zip::MemberRead 创建了一个 PoC 脚本,从同一文件中提取信息,并且执行速度非常快(以秒为单位)。

我担心在我的场景中使用 Archive::Zip 是否存在任何限制。

最佳答案

@MiguelPrz: in my script, there is step walkthrough to zip file to retrieve member name and size and it quite fast. And next step is read the content of metadata file, by using unzip with specified file name, it very slow. –Le Vu

无需调用unzip -- 您可以使用 IO::Uncompress::Unzip直接访问元数据文件。

这是一个快速运行的示例,它将检查名为 metadata.txt 的成员的 zip 文件。 。如果找到,它将把内容读入内存并打印出来。

首先创建一个测试 zip 文件,其中包含名为 metadata.txt 的成员.

$ echo abc >metadata.txt
$ zip test.zip metadata.txt
adding: metadata.txt (stored 0%)

现在有一些代码遍历 zip 文件并检查元数据成员。

#!/usr/bin/perl


use strict;
use warnings;

use IO::Uncompress::Unzip qw($UnzipError);

my $zipfile = "test.zip";
my $u = IO::Uncompress::Unzip->new( $zipfile )
or die "Cannot open $zipfile: $UnzipError";

my $status;
for ($status = 1; $status > 0; $status = $u->nextStream())
{
my $name = $u->getHeaderInfo()->{Name};
warn "Processing member $name\n" ;

if ($name eq 'metadata.txt')
{
local $/;
my $data = <$u>;
print "METADATA is [$data]\n";
}

last if $status < 0;
}

die "Error processing $zipfile: $!\n"
if $status < 0 ;

当我运行时,我得到这个输出

$ perl testzip.pl
Processing member metadata.txt
METADATA is [abc
]

[全面披露——我是 IO::Uncompress::Unzip 的作者]

关于perl - Archive::Zip 和 IO::Uncompress::Unzip 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71866348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com