CRC(Cyclic Redundancy Check)校验实用程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC 是最著名的一种。CRC 的全称是循环冗余校验。
CRC 检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为 0.0047% 以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC 无处不在:著名的通讯协议 X.25 的 FCS(帧检错序列)采用的是 CRC-CCITT,ARJ、LHA 等压缩工具软件采用的是 CRC32,磁盘驱动器的读写采用了 CRC16,通用的图像存储格式 GIF、TIFF 等也都用 CRC 作为检错手段。
CRC32 校验和的纯 Java 实现,它使用与内置本机 CRC32 相同的多项式。这是为了避免在校验和的某些用途(即连续校验和许多小块数据)中产生JNI开销。
当前版本的速度是 Sun 原生 java.util.zip 的 10 到 1.8 倍。
实例:计算指定字符串和整数的 CRC32 值,如下:
import org.apache.commons.codec.digest.PureJavaCrc32; public class PureJavaCrc32Demo { public static void main(String[] args) { PureJavaCrc32 crc32 = new PureJavaCrc32(); byte[] val = "aaaaaa".getBytes(); crc32.update(val, 0, val.length); System.out.println(crc32.getValue()); // 重置,计算一个整数的 CRC32 crc32.reset(); crc32.update(100); System.out.println(crc32.getValue()); } }
输出结果:
1524898296 2564639436