Java可恢复散列计算
我想实现在服务器上上传的某些文件的可恢复的即时散列生成。 这些文件很大,所以我正在使用MessageDigest类的更新(byte [])方法(如此处所述,例如:如何生成MD5哈希?),因为新字节从HttpServletRequest的InputStream到达。
一切都很顺利,但是,当我想添加可恢复的上传支持时,它变得很有趣。 如果上传过早终止,则不完整的文件将存储在磁盘上。 但是,控制器(和底层服务)退出,因此MessageDigest对象丢失。 在这种情况发生之前,我可以将MessageDigest对象序列化到磁盘(或数据库,这并不重要),当我再次反序列化对象时,它会记住它的临时状态,所以当我恢复上传时(从确切所以没有字节是多余的,也没有一些字节丢失),并继续更新()反序列化的MessageDigest,最终我得到相同的结果(散列),就像文件一次上传完整一样?
抓住像这个或这一个自定义MD5实现之一。 使其可序列化或公开其内部状态。 上传被中止时保持状态,并在恢复上传时恢复。
哈希计算起来很便宜(MD5加倍;你确定你不想要SHA1?)。 一旦您检测到上传已恢复,我会建议您从头开始重新整理所有内容。 运行时间应该很低,除非上传真的很大 - 希望很大,中断的上传会很少。
链接地址: http://www.djcxy.com/p/62091.html