perl – 逐位读取二进制文件
发布时间:2020-12-16 06:13:35 所属栏目:大数据 来源:网络整理
导读:有没有办法可以一点一点地读取二进制文件,而不将其保存为数组? 我有一个非常大的二进制文件,我需要一点一点地阅读它.将它保存为数组会花费很多时间,所以我想阻止它.我不在乎文件内容发生了什么. $size = stat($args{file});my $vector;open BIN,"$args{file
有没有办法可以一点一点地读取二进制文件,而不将其保存为数组?
我有一个非常大的二进制文件,我需要一点一点地阅读它.将它保存为数组会花费很多时间,所以我想阻止它.我不在乎文件内容发生了什么. $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; 解决方法
使用特殊的$/变量一次读入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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |