【发布时间】:2010-09-28 06:00:50
【问题描述】:
我正在使用 Perl 生成相对较大的文件。我生成的文件有两种:
-
表格文件,即我逐行(逐行)打印的文本文件,主要包含数字。典型的行如下所示:
126891 126991 14545 12 我创建的序列化对象然后使用
Storable::nstore存储到一个文件中。这些对象通常包含一些带有数值的大散列。对象中的值可能已被packed 以节省空间(对象unpacks 在使用它之前的每个值)。
目前我通常在做以下事情:
use IO::Compress::Gzip qw(gzip $GzipError);
# create normal, uncompressed file ($out_file)
# ...
# compress file using gzip
my $gz_out_file = "$out_file.gz";
gzip $out_file => $gz_out_file or die "gzip failed: $GzipError";
# delete uncompressed file
unlink($out_file) or die "can't unlink file $out_file: $!";
这是非常低效的,因为我首先将大文件写入磁盘,然后gzip 再次读取并压缩它。所以我的问题如下:
我可以在不先将文件写入磁盘的情况下创建压缩文件吗?是否可以按顺序创建压缩文件,即像前面描述的场景(1)一样逐行打印?
Gzip听起来是不是一个合适的选择? a对于我所描述的数据类型,还有其他推荐的压缩器吗?对象中的
pack值是否有意义,以后无论如何都会被存储和压缩?
我的考虑主要是节省磁盘空间并允许以后快速解压。
【问题讨论】:
-
尽量不要在同一个问题中问多个问题。对于仅对您的某些问题有答案的人来说,这很难回答......
-
那你有什么建议?复制三个不同问题的序言?
-
是的。复制粘贴并不难 :) 确保将每个问题链接到其他问题,并使标题明显不同,因此很明显,您不仅仅是在复制同一个问题。
-
@bdonlan。谢谢,我下次再做。
标签: perl serialization gzip compression