Wednesday, October 25, 2006
자바 Java] CRC32 구하기 소스, 파일 CRC 값 계산 출력
옵션으로 지정해준 파일의 CRC32 값을 구하는 자바 소스입니다. 자바에 내장되어 있는 java.util.zip.CRC32 클래스로 값을 얻습니다. ZIP 이나 RAR에서 사용되는 CRC32 값과 동일한 값을 얻을 수 있습니다.
이 자바 프로그램으로, 675MB 크기 파일의 CRC32 를 구하는 데, 16초 걸렸습니다.
순수한 C로 작성된 CRC32 프로그램으로는 15초 걸렸습니다. 약간 차이는 있지만, 속도는 아주 빠릅니다.
소스 파일명: GetCRC32.java
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
컴파일 및 실행 결과:
0.exe 라는 어떤 파일의 CRC32 값이 FE4186B2 라고 나오고 있습니다.
공백과 한글이 들어간 파일명도, 큰따옴표로 둘러싸 주면 잘 작동합니다.
이 자바 프로그램으로, 675MB 크기 파일의 CRC32 를 구하는 데, 16초 걸렸습니다.
순수한 C로 작성된 CRC32 프로그램으로는 15초 걸렸습니다. 약간 차이는 있지만, 속도는 아주 빠릅니다.
JAVA: 파일의 CRC32 값 얻기 소스 코드
소스 파일명: GetCRC32.java
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
import java.io.*;
import java.util.zip.*;
public class GetCRC32 {
public static void main(String args[]) {
// 파일명을 옵션으로 주지 않으면 에러 내고 종료
if (args.length != 1) {
System.err.println("Usage: java GetCRC32 <input filename>");
System.exit(1);
}
// CRC32 값과 파일명 화면에 출력
System.out.format(
"%08X : %s%n",
getCRC32Value(args[0]),
args[0]
);
}
public static long getCRC32Value(String filename) {
Checksum crc = new CRC32();
try {
////////////////////////////////////////////////////////////////////////////////
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
byte buffer[] = new byte[32768];
int length = 0;
while ((length = in.read(buffer)) >= 0)
crc.update(buffer, 0, length);
in.close();
////////////////////////////////////////////////////////////////////////////////
} catch (IOException e) {
System.err.println(e);
System.exit(2);
}
return crc.getValue();
}
}
import java.util.zip.*;
public class GetCRC32 {
public static void main(String args[]) {
// 파일명을 옵션으로 주지 않으면 에러 내고 종료
if (args.length != 1) {
System.err.println("Usage: java GetCRC32 <input filename>");
System.exit(1);
}
// CRC32 값과 파일명 화면에 출력
System.out.format(
"%08X : %s%n",
getCRC32Value(args[0]),
args[0]
);
}
public static long getCRC32Value(String filename) {
Checksum crc = new CRC32();
try {
////////////////////////////////////////////////////////////////////////////////
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
byte buffer[] = new byte[32768];
int length = 0;
while ((length = in.read(buffer)) >= 0)
crc.update(buffer, 0, length);
in.close();
////////////////////////////////////////////////////////////////////////////////
} catch (IOException e) {
System.err.println(e);
System.exit(2);
}
return crc.getValue();
}
}
컴파일 및 실행 결과:
D:\Z>javac GetCRC32.java
D:\Z>java GetCRC32 0.exe
FE4186B2 : 0.exe
D:\Z>
D:\Z>java GetCRC32 0.exe
FE4186B2 : 0.exe
D:\Z>
0.exe 라는 어떤 파일의 CRC32 값이 FE4186B2 라고 나오고 있습니다.
D:\Z>javac GetCRC32.java && java GetCRC32 "사본 - test.jpg"
6E17BBC0 : 사본 - test.jpg
D:\Z>
6E17BBC0 : 사본 - test.jpg
D:\Z>
공백과 한글이 들어간 파일명도, 큰따옴표로 둘러싸 주면 잘 작동합니다.
tag: java
자바 | Java
<< Home