免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6845 | 回复: 11
打印 上一主题 下一主题

digest::MD5校验超大文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-02 10:22 |只看该作者 |倒序浏览
我校验10G的文件,但是内存一直上涨,直到用光, 请大家review一下我的代码。谢谢

  1. sub md5_sum
  2. {  

  3.         my $start_time = time();
  4.         while(my $buffer = <$fh_local_file>)
  5.         {
  6.                  $g_md5->add($buffer);
  7.                  undef $buffer;
  8.         }
  9.         
  10.         return $g_total_md5_sum;
  11. }
复制代码
<$fh_local_file>在外面打开了的,
$g_md5->hexdigest()也在外面

论坛徽章:
0
2 [报告]
发表于 2010-02-02 10:34 |只看该作者
本帖最后由 churchmice 于 2010-02-02 10:40 编辑

try

  1.            use Digest::MD5;

  2.            my $file = shift || "/very/very/large_file";
  3.            open(FILE, $file) or die "Can't open '$file': $!";
  4.            binmode(FILE);

  5.            print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";

复制代码

论坛徽章:
0
3 [报告]
发表于 2010-02-02 10:50 |只看该作者
我试试呢 先谢谢

论坛徽章:
0
4 [报告]
发表于 2010-02-02 11:25 |只看该作者
还是不行啊? 请问还有什么方式呢?
churchmice  你试试呢 谢谢了

论坛徽章:
0
5 [报告]
发表于 2010-02-02 12:09 |只看该作者
回复 4# xp5211314
我这边没有这么大的文件可以用于实验
不过不应该会耗用这么大内存啊,要不你另外找找别的模块
上search.cpan.org搜一下
http://search.cpan.org/~dmuey/Digest-MD5-File-0.07/File.pm

或者自己用c码一个也不复杂的

论坛徽章:
0
6 [报告]
发表于 2010-02-02 12:11 |只看该作者
其实直接perl里面system("md5sum","PATH_TO_FILE"),然后将结果取回好了

论坛徽章:
0
7 [报告]
发表于 2010-02-02 12:57 |只看该作者
恩  主要是需求 有些特殊 不过你给的建议都不错  谢谢了

论坛徽章:
0
8 [报告]
发表于 2010-02-02 13:42 |只看该作者
我也有需要对大文件取MD5值的,可是效率上一直是个问题

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
9 [报告]
发表于 2010-02-02 16:07 |只看该作者
  1. use strict;
  2. use warnings;

  3. use Digest::MD5;

  4. open my $fh,"<","F:/123/照片 088.jpg" or die "Open file error!\n";
  5. binmode $fh;

  6. my $md5 = Digest::MD5->new;
  7. $md5->addfile($fh);

  8. print $md5->hexdigest,"\n";
  9. close $fh;
复制代码

论坛徽章:
0
10 [报告]
发表于 2010-02-03 16:47 |只看该作者
问题已经解决:
贴出来让大家分析分析

  1. while(read ($fh_local_file,my $buffer,1024))
  2. {
  3.                  $g_md5->add($buffer);
  4.                  undef $buffer;
  5.         }
复制代码
采用read的方式可以解决。 但是为什么“<>”方式不正确呢?
这一点我还在研究,大家若知道 请告知 谢谢

大文件的校验总体来说 效率的提高很难了,毕竟MD5校验的算法 已经被优化了很多次了。

不过可以从另一个方向来考虑,比如 要远程下载并校验大文件,
完全可以进行流式校验,边下载边校验的方式 比较不错

thanks all
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP