CRC32

什么是CRC32?

CRC(Cyclic Redundancy Check)校验实用程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC 是最著名的一种。CRC 的全称是循环冗余校验。

CRC 检错能力极强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为 0.0047% 以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC 无处不在:著名的通讯协议 X.25 的 FCS(帧检错序列)采用的是 CRC-CCITT,ARJ、LHA 等压缩工具软件采用的是 CRC32,磁盘驱动器的读写采用了 CRC16,通用的图像存储格式 GIF、TIFF 等也都用 CRC 作为检错手段。

PureJavaCrc32

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
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号