Java: обновить CRC32 из потока - PullRequest
5 голосов
/ 30 октября 2011

Не понимаю ли я использование классов CRC32 или CheckedInputStream для вычисления контрольной суммы путем постоянного обновления с последними данными? Когда вход <128KiB, генерируется действительный CRC32. Что-нибудь больше чем 128 КБ, и контрольная сумма терпит неудачу. Ниже приведен код, с которым я работаю (используя объект <code>CRC32 и BufferedInputStream, но та же проблема возникает, если я использую CheckedInputStream для отслеживания CRC32).

Буду признателен за любые советы или комментарии, спасибо

private static long calcCRC32() throws IOException {
    BufferedInputStream inStream = new BufferedInputStream(System.in);
    int BLOCK_SIZE = 128*1024; //128KiB
    int len;
    byte[] buffer = new byte[BLOCK_SIZE];

    CRC32 crc32 = new CRC32();
    crc32.reset();

    while((len = bufferedInputStream.read(buffer, 0, BLOCK_SIZE)) > 0){         
        crc32.update(buffer, 0, len);
        buffer = new byte[BLOCK_SIZE];
    }

    return crc32.getValue();
}
...