CRC32
またはCheckedInputStream
クラスのいずれかを使用して、最新の入力で継続的に更新することによってチェックサムを計算することを誤解していますか? 入力が <= 128KiB の場合、有効な CRC32 が生成されます。128KiB を超えると、チェックサムが失敗します。以下は私が作業しているコードです(CRC32
オブジェクトを使用していますが、CRC32を追跡するためにBufferedInputStream
aを使用すると同じ問題が発生します)。CheckedInputStream
アドバイスやコメントをいただければ幸いです。
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();
}