JAVA循环冗余校验(CRC32)

    xiaoxiao2021-12-14  22

    CRC32简介

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

    CRC实现

    package com.jianggujin.codec; import java.io.IOException; import java.io.InputStream; import java.util.zip.CRC32; import com.jianggujin.codec.util.JCodecException; /** * CRC32 * * @author jianggujin * */ public class JCRC32 { private static final int BUFFER_SIZE = 512; /** * 编码 * * @param data * @return */ public static long encode(byte[] data) { CRC32 crc32 = new CRC32(); crc32.update(data); return crc32.getValue(); } /** * 编码 * * @param data * @return */ public static long encode(InputStream data) { try { byte[] buffer = new byte[BUFFER_SIZE]; int read = data.read(buffer, 0, BUFFER_SIZE); CRC32 crc32 = new CRC32(); while (read > -1) { crc32.update(buffer, 0, read); read = data.read(buffer, 0, BUFFER_SIZE); } return crc32.getValue(); } catch (IOException e) { throw new JCodecException(e); } } }

    测试代码:

    package com.jianggujin.codec.test; import java.io.IOException; import org.junit.Test; import com.jianggujin.codec.JCRC32; public class CRC32Test { String str = "jianggujin"; @Test public void test() throws IOException { System.out.println("原串:" + str); System.out.println("CRC32:" + JCRC32.encode(str.getBytes())); } }

    测试结果: 原串:jianggujin CRC32:724585211

    转载请注明原文地址: https://ju.6miu.com/read-969357.html

    最新回复(0)