package com.kreative.paint.material.sprite; public class CRCCalculator { private final int[] crcTable; public CRCCalculator() { crcTable = new int[256]; for (int n = 0; n < 256; n++) { int c = n; for (int k = 0; k < 8; k++) { if ((c & 1) != 0) { c = 0xEDB88320 ^ (c >>> 1); } else { c = c >>> 1; } } crcTable[n] = c; } } public int updateCRC(int crc, byte[] data) { for (int n = 0; n < data.length; n++) { crc = crcTable[(crc ^ data[n]) & 0xFF] ^ (crc >>> 8); } return crc; } public int calculateCRC(byte[] data) { return updateCRC(-1, data) ^ -1; } }