• Java中循环冗余校验(CRC32)的实现


    CRC32简介

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

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

    CRC实现

    CommonUtil.getCRC32(String filePath)
    /**
    * 获取文件CRC32校验值
    *
    * @param filePath 文件绝对路径
    * @return
    */
    public static long getCRC32(String filePath) {
    long crc32Value = 0L;
    try {
    CRC32 crc32 = new CRC32();
    File file = FileUtil.file(filePath);
    int fileLen = (int) file.length();
    InputStream in = new FileInputStream(file);
    //分段进行crc校验
    int let = 10 * 1024 * 1024;
    int sum = fileLen / let + 1;
    for (int i = 0; i < sum; i++) {
    if (i == sum - 1) {
    let = fileLen - (let * (sum - 1));
    }
    byte[] b = new byte[let];
    in.read(b, 0, let);
    crc32.update(b);
    }
    crc32Value = crc32.getValue();
    } catch (Exception e) {
    LOGGER.error("crc32检验异常:", e);
    }
    return crc32Value;
    }

    测试代码:

    @Test
    public void test() {
    String filePath = "C:\Users\admin\Desktop\OTA_EH-OS-M17-T01-IOT_V1.78_20200828_FV1.00.zip";
    String crc32 = CommonUtil.getCRC32(filePath);
    System.out.println(crc32);
    }

    测试结果: 

    3450958763

  • 相关阅读:
    SpringBoot 2.X整合Mybatis
    SpringBoot 2.X集成 jdbc自动配置原理探究
    15 道 Spring Boot 高频面试题,看完直接当面霸【入门实用】
    SpringBoot整合Thymeleaf-基于SpringBoot2.X版本
    vue-manage-system 后台管理系统开发总结
    Node.js 应用:Koa2 使用 JWT 进行鉴权
    Parcel:常见技术栈的集成方式
    HTML5 桌面通知:Notification API
    Electron 实战桌面计算器应用
    Node.js 入门:Express + Mongoose 基础使用
  • 原文地址:https://www.cnblogs.com/huangjinyong/p/13733735.html
Copyright © 2020-2023  润新知