Java可恢复哈希计算

Java可恢复哈希计算,java,serialization,hash,resume,Java,Serialization,Hash,Resume,我想实现一些上传到服务器上的文件的可恢复的动态哈希生成。这些文件很大,所以我在动态使用MessageDigest类的update(byte[])方法(如本文所述,例如:),因为新字节来自HttpServletRequest的InputStream 一切都进行得很顺利,但是,当我想添加可恢复的上传支持时,它变得有趣了。如果上载提前终止,则不完整的文件将存储在磁盘上。但是,控制器(和底层服务)退出,因此MessageDigest对象丢失。在此之前,我是否可以将MessageDigest对象序列化到磁

我想实现一些上传到服务器上的文件的可恢复的动态哈希生成。这些文件很大,所以我在动态使用MessageDigest类的update(byte[])方法(如本文所述,例如:),因为新字节来自HttpServletRequest的InputStream


一切都进行得很顺利,但是,当我想添加可恢复的上传支持时,它变得有趣了。如果上载提前终止,则不完整的文件将存储在磁盘上。但是,控制器(和底层服务)退出,因此MessageDigest对象丢失。在此之前,我是否可以将MessageDigest对象序列化到磁盘(或DB,这无关紧要),这样当我再次反序列化对象时,它将记住其临时状态,因此当我恢复上载时(从它之前终止的确切位置开始,因此没有多余的字节,也没有丢失的字节)继续更新反序列化的MessageDigest,最终我得到的结果(散列)与文件一次全部上载时的结果相同?

散列计算起来很便宜(MD5加倍;您确定不需要SHA1吗?)。我建议您在检测到上传已恢复后,从一开始就重新设置所有内容。除非上传量非常大,否则运行时间应该很低——希望大的、中断的上传会很少

获取一个自定义MD5实现,如或。使其可序列化或仅将其内部状态公开。中止上载时保留状态,恢复上载时恢复状态。

MessageDigest
不可
Serializable
,因此立即的答案是否定的。我将允许其他更熟悉Java server编程的人评论您如何最好地处理此问题。感谢您的回答,我觉得这是最有用的。谢谢你的回答,但是,重新洗牌对我来说不是很好的选择。我希望这适用于上传大文件(高达1GB),如果用户使用wifi/等设备,其连接可能会中断。磁盘将同时处理许多上传和下载,因此我不想在这些磁盘上增加额外的哈希计算开销。当然,我可以使用SHA1(并且可能会使用,该链接只是一个示例),但即使是MD5也完全足够了,因为在这个用例中,我不使用哈希来实现安全性(密码存储),而只用于生成校验和