Apache Commons Codec은 자바로 작성된 라이브러리로, 다양한 인코딩 및 디코딩 작업을 수행하는 데 도움을 줍니다. 이 라이브러리는 많은 압축 형식을 지원하며, 이 글에서는 그 중 일부를 살펴보도록 하겠습니다.
1. Gzip 압축
Gzip은 파일을 압축하는 데 흔히 사용되는 형식 중 하나입니다. Apache Commons Codec의 GzipCodec
클래스를 사용하여 Gzip 형식으로 압축 파일을 생성할 수 있습니다. 다음은 이를 사용하는 예시 코드입니다:
import org.apache.commons.codec.compress.GzipCodec;
import org.apache.commons.codec.compress.GzipCompressorOutputStream;
import java.io.*;
public class GzipCompressionExample {
public static void compressFile(String sourceFile, String compressedFile) throws IOException {
FileInputStream inputStream = new FileInputStream(sourceFile);
FileOutputStream outputStream = new FileOutputStream(compressedFile);
GzipCompressorOutputStream gzipOutputStream = new GzipCompressorOutputStream(outputStream);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0) {
gzipOutputStream.write(buffer, 0, len);
}
gzipOutputStream.close();
outputStream.close();
inputStream.close();
}
public static void main(String[] args) {
try {
compressFile("input.txt", "compressed.gz");
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 예시는 input.txt
파일을 Gzip 형식으로 압축하여 compressed.gz
파일로 저장합니다.
2. Bzip2 압축
Bzip2는 Gzip과 비슷하게 파일을 압축하는 데 사용되는 형식입니다. Apache Commons Codec은 BZip2Codec
클래스를 제공하여 Bzip2 형식으로 압축 파일을 생성할 수 있습니다. 다음은 Bzip2 압축을 사용하는 예시 코드입니다:
import org.apache.commons.codec.compress.BZip2CompressorOutputStream;
import java.io.*;
public class Bzip2CompressionExample {
public static void compressFile(String sourceFile, String compressedFile) throws IOException {
FileInputStream inputStream = new FileInputStream(sourceFile);
FileOutputStream outputStream = new FileOutputStream(compressedFile);
BZip2CompressorOutputStream bzip2OutputStream = new BZip2CompressorOutputStream(outputStream);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0) {
bzip2OutputStream.write(buffer, 0, len);
}
bzip2OutputStream.close();
outputStream.close();
inputStream.close();
}
public static void main(String[] args) {
try {
compressFile("input.txt", "compressed.bz2");
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 예시는 input.txt
파일을 Bzip2 형식으로 압축하여 compressed.bz2
파일로 저장합니다.
3. 사용자 정의 압축 형식
Apache Commons Codec은 위에서 소개한 Gzip 및 Bzip2 외에도 다른 압축 형식도 지원합니다. CompressorOutputStream
클래스를 상속하고 압축 알고리즘을 구현함으로써 사용자 정의 압축 형식을 생성할 수 있습니다.
import org.apache.commons.codec.compress.CompressorOutputStream;
import java.io.*;
public class CustomCompressionExample {
public static void compressFile(String sourceFile, String compressedFile) throws IOException {
FileInputStream inputStream = new FileInputStream(sourceFile);
FileOutputStream outputStream = new FileOutputStream(compressedFile);
// 사용자 정의 압축 알고리즘을 구현한 클래스를 생성
CustomCompressorOutputStream customOutputStream = new CustomCompressorOutputStream(outputStream);
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0) {
customOutputStream.write(buffer, 0, len);
}
customOutputStream.close();
outputStream.close();
inputStream.close();
}
public static void main(String[] args) {
try {
compressFile("input.txt", "compressed.custom");
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 예시는 input.txt
파일을 사용자 정의 압축 형식으로 압축하여 compressed.custom
파일로 저장합니다. CustomCompressorOutputStream
클래스는 사용자가 직접 구현해야 합니다.
결론
Apache Commons Codec은 다양한 압축 형식을 지원하여 파일 압축 작업을 손쉽게 처리할 수 있도록 도와줍니다. Gzip, Bzip2 외에도 사용자가 원하는 형식을 구현하여 사용할 수 있기 때문에, 자신의 프로젝트에 적합한 압축 방식을 선택하여 사용할 수 있습니다.
더 많은 정보는 공식 Apache Commons Codec 페이지를 참조하시기 바랍니다.