有没有一种方法可以逐位读取二进制文件,而不将其保存为数组?
我有一个非常大的二进制文件,我需要一点一点地阅读它。将它保存为数组会花费很多时间,所以我想阻止它。我不在乎文件内容发生了什么。
$size = stat($args{file});
my $vector;
open BIN, "<$args{file}";
read(BIN, $vector, $size->[7], 0);
close BIN;
# The code below is the part that takes a lot of time.
my @unpacked = split //, (unpack "B*", $vector);
return @unpacked;
答案 0 :(得分:1)
使用特殊的$/
变量一次读取文件1个字节,然后使用按位运算符检查字节中的每个位。最终应该是以下内容:
$/ = \1; # read 1 byte at a time
while(<>) {
my $ord = ord($_);
# for each bit in the byte
for(1 .. 8) {
if($ord & 1) {
# do 1 stuff
}
else {
# do 0 stuff
}
# move onto the next bit
$ord >>= 1;
}
}
答案 1 :(得分:0)
使用内置vec
函数将Perl标量操作为位向量。