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;/** * CRC32 * * @author jianggujin * */public class HQCRC32{ private static HQCRC32 crc32 = new HQCRC32(); public static HQCRC32 getInstance() { return crc32; } private HQCRC32() { } private static final int STREAM_BUFFER_LENGTH = 1024; public long encrypt(byte[] data) { CRC32 crc32 = new CRC32(); crc32.update(data); return crc32.getValue(); } public long encrypt(InputStream data) throws IOException { final byte[] buffer = new byte[STREAM_BUFFER_LENGTH]; int read = data.read(buffer, 0, STREAM_BUFFER_LENGTH); CRC32 crc32 = new CRC32(); while (read > -1) { crc32.update(buffer, 0, read); read = data.read(buffer, 0, STREAM_BUFFER_LENGTH); } return crc32.getValue(); }}
測試代碼:
import org.junit.Test;import com.jianggujin.codec.HQCRC32;public class CRC32Test{ HQCRC32 crc32 = HQCRC32.getInstance(); @Test public void encode() { byte[] data = "jianggujin".getBytes(); long result = crc32.encrypt(data); System.err.println(result); }}
測試結果:
724585211