我正在从http服务器下载文件,并且必须考虑在下载期间的随机点,网络连接失败或计算机崩溃。如果发生这种情况,我会使用HTTP“Range:”标题启动简历下载。
由于下载必须针对MD5哈希进行验证,因此我似乎无法在恢复后使用网络输入流来获取正确的哈希,因为java.security.MessageDigest似乎没有方法基本上说“从我之前下载的部分md5哈希开始更新当前的md5哈希”。
我对md5的内部不是很熟悉 - 这在理论上是否可行,是否有可以让我这样做的库?
从下载的文件中计算md5哈希值将是非常昂贵的性能。
答案 0 :(得分:3)
在向网络流提供文件之前,您可以向MD5提供要恢复的文件的内容。
如果您自己实施MD5,则可以沿部分下载的文件保存状态,并从那里恢复MD5计算。例如,使用this MD5 implementation,就像在com.twmacinta.util.MD5State state
内保存/加载com.twmacinta.util.MD5
一样简单。关于你的评论,请注意本机实现是完全可选的,它应该在纯Java中工作。以下是documentation:
当适当的本机库可用时,此类将尝试使用本机方法快速计算校验和[...]如果找不到库,代码将回退到默认(较慢)的Java代码。
答案 1 :(得分:2)
我刚刚使用建议的fast-md5完成了针对此问题的库,但没有原生支持。您可以序列化状态并在程序重新启动时重新加载它。