Java可恢复哈希计算

时间:2012-08-01 10:51:16

标签: java serialization hash resume

我希望实现在服务器上上传的某些文件的可恢复的即时哈希生成。文件很大所以我正在使用MessageDigest类的update(byte [])方法(如此处所述,例如:How can I generate an MD5 hash?),因为新字节来自HttpServletRequest的InputStream。

一切进展顺利,但是,当我想添加可恢复的上传支持时,它变得有趣。如果上载过早终止,则不完整的文件将存储在磁盘上。但是,控制器(和底层服务)退出,因此MessageDigest对象丢失。在此之前,我可以将MessageDigest对象序列化到磁盘(或DB,无关紧要)的方式,当我再次反序列化对象时,它会记住它的临时状态,所以当我恢复上传(从确切它之前被终止的地方,所以没有字节是冗余的,也没有一些字节缺失)并继续update()反序列化的MessageDigest,最终我得到了相同的结果(哈希),好像文件是一次上传的一样? / p>

2 个答案:

答案 0 :(得分:3)

抓取其中一个自定义MD5实施,例如this onethis one。使其可序列化或仅将其内部状态公开。上传中止时保留状态,并在恢复上载时恢复。

答案 1 :(得分:1)

哈希计算起来很便宜(MD5加倍;你确定你不想要SHA1吗?)。一旦检测到上传已恢复,我建议从一开始就重新进行所有操作。运行时应该很低,除非上传真的很大 - 希望很大,中断的上传将是稀缺的。