Calculo CRC-16 em File GRANDE

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.