这是一次通过更彻底地解释我想做什么来改进我的Perl: seek to and read bits, not bytes的尝试。
我有x,一个9136x42个整数数组,我想把它高效地存储在一个文件中。整数具有以下约束:
问题:使用Perl,我如何有效地将这个数组存储在一个文件中?
备注:
关于我在做什么的细节太多了:
发布于 2014-08-27 13:55:39
我不确定我是否应该鼓励你,但是它就像Data::BitStream
会按照你的要求去做。
下面的程序将一个38位值和一个25位值写入一个文件,然后打开并完整地检索这些值。
#!/usr/bin/perl
use strict;
use warnings;
use Data::BitStream;
{
my $bs_out = Data::BitStream->new(
mode => 'w',
file => 'bits.dat',
);
printf "Maximum %d bits per word\n", $bs_out->maxbits;
$bs_out->write(38, 137438953471);
$bs_out->write(25, 16777215);
printf "Total %d bits written\n\n", $bs_out->len;
}
{
my $bs_in = Data::BitStream->new(
mode => 'ro',
file => 'bits.dat',
);
printf "Total %d bits read\n\n", $bs_in->len;
print "Data:\n";
print $bs_in->read(38), "\n";
print $bs_in->read(25), "\n";
}
输出
Maximum 64 bits per word
Total 63 bits written
File size 11 bytes
Total 63 bits read
Data:
137438953471
16777215
38和25是所写的63位数据,模块确认了这一点。但是显然还有一些额外的管理数据,因为结果文件的总大小是11个字节,而不仅仅是最少需要的8个字节。注意,当重新打开时,数据会记住它有63位长。但是,它比一个文件包含两个简单的64位整数所需的16个字节要短。
如何处理这些信息取决于您自己,但请记住,以这种方式打包的数据将很难用十六进制编辑器进行调试。如果你收养这样的东西,你可能会开枪打中自己的脚。
https://stackoverflow.com/questions/25518204
复制相似问题