CRC图片或文件完整性校验码
直接看代码:
package com.shijie.box.db.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
public class CRCUtil {
public static void main(String[] args) {
try {
System.out.println(getCRC32("F:\\1.jpg"));
System.out.println(getInputCRC32("https://pics7.baidu.com/feed/ca1349540923dd5405bbf95e24ab5cda9d824867.jpeg?token=a81002e0e2a77166ee611c3145af0b1f&s=36E6F500F662A2FEDE204914010080C2"));
System.out.println(checksumBufferedInputStream("F:\\\\1.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 采用BufferedInputStream的方式加载文件
*/
public static long checksumBufferedInputStream(String filepath) throws IOException {
InputStream inputStream = new BufferedInputStream(new FileInputStream(filepath));
CRC32 crc = new CRC32();
byte[] bytes = new byte[1024];
int cnt;
while ((cnt = inputStream.read(bytes)) != -1) {
crc.update(bytes, 0, cnt);
}
inputStream.close();
return crc.getValue();
}
/**
* 使用CheckedInputStream计算CRC
*/
public static Long getCRC32(String filepath) throws IOException {
CRC32 crc32 = new CRC32();
FileInputStream fileinputstream = new FileInputStream(new File(filepath));
CheckedInputStream checkedinputstream = new CheckedInputStream(fileinputstream, crc32);
while (checkedinputstream.read() != -1) {
}
checkedinputstream.close();
return crc32.getValue();
}
/**
* 使用InputStream计算CRC
*/
public static Long getInputCRC32(String filepath) throws IOException {
CRC32 crc32 = new CRC32();
URL url = new URL("https://pics1.baidu.com/feed/b17eca8065380cd7ac9342f4cb0b4030588281ea.jpeg?token=4be604c061e90a3ad2b074fc82c1c155&s=B3A001AE4FFB188C3D37DA8C0300E095");
URLConnection con = url.openConnection();
InputStream inputStream = con.getInputStream();
CheckedInputStream checkedinputstream = new CheckedInputStream(inputStream, crc32);
while (checkedinputstream.read() != -1) {
}
checkedinputstream.close();
return crc32.getValue();
}
}
以上代码直接根据io流或者URLConnection获得的输入流来得到文件CRC码