Red de conocimiento informático - Conocimiento informático - Cómo calcular el MD5 de un flujo de entrada

Cómo calcular el MD5 de un flujo de entrada

Primero, la forma más sencilla de calcular MD5 es combinar las dos líneas de código guardando el archivo y luego leyendo la secuencia del archivo:

public static String copyInputStreamToFileAndGetMd5Hex(InputStream inputStream, File file) throws IOException {

FileUtils.copyInputStreamToFile(inputStream, archivo);

Devuelve DigestUtils.md5Hex(new FileInputStream (archivo));

}

Por supuesto , esto no es carbono neutral ya que tienes que leer la misma transmisión dos veces.

En este punto puede ver el código fuente de DigestUtils. Si rastrea la fuente, puede ver:

lanzamientos públicos estáticos de MessageDigest updateDigest (resumen final de MessageDigest, datos finales de InputStream). IOException {

byte final[] buffer = nuevo byte[STREAM_BUFFER_LENGTH];

int read = data.read(buffer, 0, STREAM_BUFFER_LENGTH);

while (leer gt; -1) {

digest.update(buffer, 0, read);

read = data.read(buffer, 0, STREAM_BUFFER_LENGTH);

}

return digest

}

Esta no es una técnica avanzada, simplemente divide todo el InputStream en una matriz de bytes. de longitud 1024, y MD5 uno por uno. Implementación de seguimiento en la fuente copyInputStreamToFile:

copia grande estática pública (entrada de InputStream, salida de OutputStream, búfer de byte[]) arroja IOException {

cuenta larga;

int n;

for(count = 0L; -1 != (n = input.read(buffer)); count = (long)n) {

salida.write( buffer , 0, n);

}

}

devuelve el recuento

}

InputStream también en Por aquí. El InputStream se divide en matrices de 4096 bytes y se escribe en el archivo de destino uno por uno.

Por lo tanto, también es una buena idea combinar estos dos fragmentos de código:

public static String copyInputStreamToFileAndGetMd5Hex(InputStream inputStream, File file) throws IOException {

MessageDigest digest = DigestUtils.getMd5Digest();

FileOutputStream OutputStream = null;

prueba {

OutputStream = new FileOutputStream(archivo);

byte[] buffer = nuevo byte[2048];

int read = inputStream.read(buffer);

while (read gt; -1) {

// Calcula MD5 y escribe en el archivo por cierto

digest.update(buffer, 0, read);

outputStream.write(buffer, 0, read); );

leer = inputStream.read(buffer, 0, leer);