2011-02-07 8 views
5

httpサーバからファイルをダウンロードしています。ダウンロード中のランダムな時点でネットワーク接続が失敗したり、コンピュータがクラッシュすることを考慮する必要があります。その場合は、HTTP「Range:」ヘッダーを使用して再開ダウンロードを開始します。再開したダウンロードのMD5ダイジェスト

MD5ハッシュに対してダウンロードを検証する必要があるため、java.security.MessageDigestはメソッドを持たないため、再開後にネットワーク入力ストリームを使用して正しいハッシュを取得する方法がないようですこれは基本的に「私が以前のダウンロードから持っているこの部分md5ハッシュから現在のmd5ハッシュをアップアップする」と言う。

私はmd5の内臓にはあまりよく慣れていません - これは理論的に可能であり、それを可能にするライブラリがありますか?

ダウンロードしたファイルからmd5ハッシュを計算することは、非常に高価なパフォーマンスになります。

+0

あなたはそれにあなたの仕事の経験を持っている一枚の紙 – Woot4Moo

答えて

3

ネットワークストリームを供給する前に、再開しているファイルの内容をMD5に入力することができます。

独自にMD5を実装した場合、部分的にダウンロードされたファイルに沿って状態を保存し、そこからMD5計算を再開することもできます。たとえば、this MD5 implementationを使用すると、com.twmacinta.util.MD5の中にcom.twmacinta.util.MD5State stateをセーブ/ロードするだけで簡単にできます。あなたのコメントに関しては、ネイティブ実装は完全にオプションであり、純粋なJavaで動作するはずです。適切なネイティブライブラリが利用可能になったとき

このクラスライブラリが見つからない場合、コードはバックに分類されます[...]すぐにチェックサムを計算するためにネイティブメソッドを使用しようとします。ここでは documentationからの引用でありますデフォルトの(より遅い)Javaコード。
+0

申し訳ありませんが、元の記事で、私は」didnののように、履歴書を話していたようにそれが見えたように私はタイトルに「D」を追加jvmの再起動の可能性については言及していません。これも考慮に入れる必要があります。 – EddyYosso

+0

あなたは正しいです。コードを見ると、このダイジェストの状態を本当に簡単に持続できるようにする必要があることがわかります。ありがとうございました。この特定のライブラリで私を悩ますのは、ネイティブの依存関係だけです。このクラスは有望ですhttp://stermiller.org/utils/MD5.java.html – EddyYosso

2

提案したfast-md5をネイティブサポートなしで使用してこの問題のライブラリを作成したところです。プログラムのバックアップが開始されると、状態をシリアル化してリロードすることができます。

https://code.google.com/p/project-penny/wiki/RecMD5

+0

私はproject-penny's(ダウンロードマネージャー)wikiへのリンクを修正しました。 – eckes

関連する問題