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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM