Olá,
Estou precisando calcular um CRC de um file, preciso ter o CRC baseado em TODOS os bytes do file, com isso… em arquivos muito grandes(tipo: 500mb) eu preciso usar o
FileInputStream e pegar todos os bytes do file, para jogar num Array de bytes para ai sim poder calcular o CRC, só que carregar um arquivo grande todo em memoria é meio que inviavel, visto que na maioria das vezes da problema de memoria…
Então, alguem teria alguma outra solução, metodo, classe para poder resolver este problema?
Abraço!
Para calcular o CRC-32, você pode tentar o seguinte programa:
import java.util.zip.*;
import java.io.*;
class CalcularCRC32 {
public static void main (String[] args) throws Exception {
BufferedInputStream is = new BufferedInputStream (new FileInputStream (args[0]));
byte[] buffer = new byte[16 * 1024];
CRC32 crc32 = new CRC32();
long totalBytesLidos = 0;
for (int nBytesLidos = is.read (buffer); nBytesLidos > 0; nBytesLidos = is.read (buffer)) {
crc32.update (buffer, 0, nBytesLidos);
totalBytesLidos += nBytesLidos;
}
is.close();
System.out.printf ("O arquivo %s, com %d bytes, tem CRC-32 = %08X %n",
args[0], totalBytesLidos, crc32.getValue());
}
}
Para calcular o CRC-16, você pode olhar o fonte de java/util/zip/CRC32.java e adaptar seu algoritmo.