2011-02-07 63 views
5

我正在從http服務器下載文件,並且必須考慮到在下載過程中的隨機點,網絡連接失敗或計算機崩潰。如果發生這種情況,我使用HTTP「Range:」標題開始恢復下載。恢復下載的MD5摘要

由於下載必須通過MD5哈希來驗證,似乎沒有辦法讓我在恢復後使用網絡輸入流以獲得正確的哈希值,因爲java.security.MessageDigest似乎沒有方法基本上說「從上一次下載,從這個部分md5散列開始增加當前md5散列」。

我對md5的內部不是很熟悉 - 這在理論上是可行的嗎?有沒有一個庫讓我這麼做?

從下載的文件中計算md5哈希值將會嚴格影響性能。

+0

我加了一個「d」的稱號,因爲它看起來就像你在談論的簡歷,如在一張紙,上面有你的工作經驗 – Woot4Moo 2011-02-07 16:07:49

回答

3

您可以在將MD5提供給網絡流之前,爲其提供正在恢復的文件的內容。

如果您自己實現了MD5,則可以將狀態保存在部分下載的文件中,並從此處恢復MD5計算。例如使用this MD5 implementation它應該像在com.twmacinta.util.MD5內保存/加載com.twmacinta.util.MD5State state一樣簡單。關於你的評論,請注意,本地實現是完全可選的,它應該在純Java中工作。以下是documentation的一段引言:

此類將嘗試使用本機方法在適當的本機庫可用時快速計算校驗和[...]如果未找到該庫,代碼將回退到默認(較慢)的Java代碼。
+0

對不起,原來的崗位我沒」不要提到jvm重啓的可能性。這也必須考慮在內。 – EddyYosso 2011-02-07 16:00:32

+0

你說得對。通過查看代碼,我發現你必須能夠在這個摘要中堅持這個狀態。謝謝。唯一困擾着這個特定庫的是本地依賴項。雖然http://ostermiller.org/utils/MD5.java.html – EddyYosso 2011-02-07 20:24:32