crc算法的应用 CRC16 CRC32

提到crc算法,可能比较陌生,但是在日常开发中,有如下应用

循环冗余检查_百度百科

本质是一个哈希函数,用于文件校验处理。

CRC16

redis集群使用了crc16 来计算对应的哈希值来计算与 16384 取模,确定当前 key 所在的哈希槽,从而确定所在的节点,做到数据分区,突破单节点请求处理的限制。

HASH_SLOT = CRC16(key) mod 16384

https://github.com/redis/redis/blob/7.2.3/src/crc16.c

redis 的 crc16 源码

使用场景

按位计算

程序空间十分苛刻但 CRC 计算速度要求不高的微控制器系统按字节计算

程序空间较大且 CRC 计算速度要求较高的计算机或微控制器系统,半字节计算

程序空间不太大,且 CRC 计算速度又不可以太慢的微控制器系统。

CRC32

一般在压缩文件里见到的多,在压缩完成在使用压缩文件打开会有 CRC 一列。

crc算法的应用 CRC16 CRC32_第1张图片

使用场景

主要在压缩方面

java 实现

开源组件里的引用

hadoop

https://github.com/apache/hadoop/blob/master/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java

kafka

https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/utils/PureJavaCrc32C.java

java 自带

java.util.zip.CRC32

在 java 9 之前具体算法细节在 jvm 实现,通过 native 进行调用,在 java 9 中重写了该类,底层使用了 intel 的 SSE4.2 指令集。

参考链接

https://jingyan.baidu.com/article/ce4366493cd4157672afd35b.html

https://baike.baidu.com/item/CRC32/7460858

https://www.cnblogs.com/wql025/p/14430778.html

https://www.cnblogs.com/wulinn/p/11607114.html

https://zhuanlan.zhihu.com/p/567234595

https://blog.51cto.com/u_16175513/7148293

你可能感兴趣的:(算法,算法)