Java中循環(huán)冗余校驗(CRC32)的實現(xiàn)
前言
本文主要給大家介紹了關(guān)于Java實現(xiàn)循環(huán)冗余校驗(CRC32)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。
CRC32簡介
CRC校驗實用程序庫 在數(shù)據(jù)存儲和數(shù)據(jù)通訊領(lǐng)域,為了保證數(shù)據(jù)的正確,就不得不采用檢錯的手段。在諸多檢錯手段中,CRC是最著名的一種。CRC的全稱是循環(huán)冗余校驗。
CRC32檢錯能力極強,開銷小,易于用編碼器及檢測電路實現(xiàn)。從其檢錯能力來看,它所不能發(fā)現(xiàn)的錯誤的幾率僅為0.0047%以下。從性能上和開銷上考慮,均遠遠優(yōu)于奇偶校驗及算術(shù)和校驗等方式。因而,在數(shù)據(jù)存儲和數(shù)據(jù)通訊領(lǐng)域,CRC無處不在:著名的通訊協(xié)議X.25的FCS(幀檢錯序列)采用的是CRC-CCITT,ARJ、LHA等壓縮工具軟件采用的是CRC32,磁盤驅(qū)動器的讀寫采用了CRC16,通用的圖像存儲格式GIF、TIFF等也都用CRC作為檢錯手段。
CRC實現(xiàn)
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);
}
}
測試結(jié)果:
724585211
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
springmvc json類型轉(zhuǎn)換錯誤解決方案
這篇文章主要介紹了springmvc json類型轉(zhuǎn)換錯誤解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
Java中Maven項目導(dǎo)出jar包配置的示例代碼
這篇文章主要介紹了Java中Maven項目導(dǎo)出jar包配置的示例代碼,需要的朋友可以參考下2018-11-11
Java concurrency集合之LinkedBlockingDeque_動力節(jié)點Java學(xué)院整理
LinkedBlockingDeque是雙向鏈表實現(xiàn)的雙向并發(fā)阻塞隊列。該阻塞隊列同時支持FIFO和FILO兩種操作方式,即可以從隊列的頭和尾同時操作(插入/刪除);并且,該阻塞隊列是支持線程安全。2017-06-06

