2011-02-07 14 views
5

Estoy descargando un archivo de un servidor http y tengo que tener en cuenta que en un punto aleatorio durante la descarga, la conexión de red falla, o la computadora falla. Si eso sucede, empiezo una descarga de reanudación usando el encabezado HTTP "Rango:".MD5 resumen de una reanudación de descarga

Dado que la descarga debe validarse en comparación con un hash MD5, parece que no hay forma de que use el network inputstream después de un currículum para obtener el hash correcto, ya que java.security.MessageDigest no parece tener método que básicamente dice "comience a eliminar el hash md5 actual de este hash md5 parcial que tengo de la descarga anterior".

No estoy muy familiarizado con las entrañas de md5 - ¿esto sería teóricamente posible y hay una biblioteca que me permita hacer eso?

Calcular el hash md5 del archivo descargado sería un rendimiento prohibitivamente costoso.

+0

He añadido una 'd' en el título, ya que parecía que hablabas de hojas de vida, como en el pedazo de papel que tiene su experiencia de trabajo en él – Woot4Moo

Respuesta

3

Puede alimentar el MD5 con el contenido del archivo que está reanudando antes de alimentarlo en la corriente de red.

Si implementó MD5 por su cuenta, podría guardar el estado a lo largo del archivo parcialmente descargado y también reanudar el cálculo de MD5 desde allí. Por ejemplo, usando this MD5 implementation debe ser tan simple como guardar/cargar el com.twmacinta.util.MD5State state dentro de com.twmacinta.util.MD5. En cuanto a su comentario, tenga en cuenta que las implementaciones nativas son completamente opcionales y deberían funcionar en Java puro. Aquí es una cita de la documentation:

Esta clase intentará usar un método nativo para calcular rápidamente las sumas de comprobación cuando la biblioteca nativo apropiado está disponible [...] Si no se encuentra la biblioteca, el código va a caer de nuevo a la código Java predeterminado (más lento).
+0

En este momento, en el post original yo no' Mencione la posibilidad de un reinicio de jvm. Esto debería tenerse en cuenta también. – EddyYosso

+0

Tienes razón. Al mirar el código, deduzco que debe ser capaz de persistir en el estado en este resumen de manera fácil. Gracias. Lo único que me molesta con esta biblioteca en particular son las dependencias nativas. Aunque esta clase parece prometedora http://ostermiller.org/utils/MD5.java.html – EddyYosso

2

Acabo de terminar de hacer una biblioteca para este problema utilizando el sugerido fast-md5 pero sin soporte nativo. Puede serializar el estado y volver a cargarlo cuando el programa vuelva a iniciarse.

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

+0

Corregí el enlace a la wiki de project-penny (administrador de descargas). – eckes

Cuestiones relacionadas