crc算法的应用 CRC16 CRC32

目录

CRC16

使用场景

CRC32

使用场景

java 实现

开源组件里的引用

java 自带


提到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 一列。

使用场景

主要在压缩方面

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

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值