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
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号