2011-02-07 17 views
5

Pobieram plik z serwera http i muszę wziąć pod uwagę, że w losowym momencie podczas pobierania połączenie sieciowe się nie udaje lub komputer ulega awarii. Jeśli tak się stanie, rozpocznę pobieranie CV za pomocą nagłówka HTTP "Range:".Podsumowanie pobranego pliku MD5

Ponieważ pobieranie musi być zatwierdzone na podstawie wartości skrótu MD5, wydaje się, że nie ma możliwości użycia sieciowego strumienia wejściowego po wznowieniu w celu uzyskania poprawnego skrótu, ponieważ wydaje się, że java.security.MessageDigest nie ma metody w zasadzie mówi "zacznij podnosić bieżącą wartość skrótu md5 z tego częściowego hasha md5, które mam z poprzedniego pobierania".

Nie jestem zaznajomiony z wnętrznościami md5 - czy byłoby to teoretycznie możliwe i czy istnieje biblioteka, która pozwala mi to robić?

Obliczenie sumy kontrolnej md5 z pobranego pliku byłoby niezmiernie drogie pod względem wydajności.

+0

Dodałem „d” w tytule, jak to wyglądało mówiłeś o CV, jak w kawałku papieru, który ma swoje doświadczenia zawodowe na nim – Woot4Moo

Odpowiedz

3

Możesz wysyłać MD5 z zawartością pliku, z którego wznawiasz przed załadowaniem go do strumienia sieciowego.

Jeśli zaimplementowałeś MD5 na własną rękę, możesz zapisać stan wzdłuż częściowo pobranego pliku i wznowić obliczenia MD5. Na przykład użycie this MD5 implementation powinno być tak proste, jak zapisywanie/ładowanie com.twmacinta.util.MD5State state wewnątrz com.twmacinta.util.MD5. Odnosząc się do twojego komentarza, zauważ, że natywne implementacje są całkowicie opcjonalne i powinny działać w czystej Javie. Oto cytat z documentation:

Ta klasa spróbuje użyć natywną metodę szybkiego obliczania sum kontrolnych, gdy stosowne natywna biblioteka jest dostępna [...] Jeśli biblioteka nie zostanie znaleziony, kod powróci do domyślny (wolniejszy) kod Java.
+0

Niestety, w oryginalnym poście nie zrobił” t wspomnieć o możliwości ponownego uruchomienia jvm. Należy to również wziąć pod uwagę. – EddyYosso

+0

Masz rację. Patrząc na kod, stwierdzam, że będziesz w stanie utrzymać stan w tym skrócie naprawdę łatwo. Dziękuję Ci. Jedyne, co nurtuje mnie tą biblioteką, to natywne zależności. Ta klasa wygląda obiecująco, ale http://stermiller.org/utils/MD5.java.html – EddyYosso

2

Właśnie skończyłem tworzyć bibliotekę dla tego problemu, korzystając z sugerowanego szybkiego md5, ale bez wsparcia natywnego. Możesz serializować stan i ponownie go załadować, gdy program uruchomi się ponownie.

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

+0

Poprawiłem link do strony wiki projektanta (download managera). – eckes

Powiązane problemy