자바는 데이터 압축을 위한 다양한 라이브러리를 제공합니다. 이러한 라이브러리를 사용하면 데이터를 압축하거나 압축 해제할 수 있으며, 용량을 절약하고 전송 시간을 단축시킬 수 있습니다.
아래는 자바에서 제공하는 주요 데이터 압축 라이브러리입니다.
1. java.util.zip 패키지
java.util.zip
패키지는 자바에서 기본적으로 제공하는 데이터 압축 라이브러리입니다. 이 패키지는 ZIP 파일 형식을 생성하고 압축된 파일을 읽을 수 있는 기능을 제공합니다. ZipOutputStream
과 ZipInputStream
클래스를 통해 압축 및 압축 해제 작업을 수행할 수 있습니다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipExample {
public static void compress(String source, String destination) throws IOException {
try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(destination))) {
FileInputStream fileIn = new FileInputStream(source);
ZipEntry zipEntry = new ZipEntry(source);
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fileIn.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fileIn.close();
}
}
public static void decompress(String source, String destination) throws IOException {
try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(source))) {
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = destination + File.separator + entry.getName();
if (!entry.isDirectory()) {
extractFile(zipIn, filePath);
} else {
File dir = new File(filePath);
dir.mkdirs();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
}
}
private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[1024];
int read;
while ((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
}
}
2. Apache Commons Compress
Apache Commons Compress는 Apache 소프트웨어 재단에서 개발한 압축 라이브러리입니다. org.apache.commons.compress
패키지에 포함되어 있으며, 다양한 압축 형식 (e.g., ZIP, TAR, GZIP, BZIP2, XZ)을 처리할 수 있는 기능을 제공합니다.
해당 라이브러리는 Maven 또는 Gradle 등을 통해 프로젝트에 추가할 수 있습니다.
dependencies {
implementation 'org.apache.commons:commons-compress:1.21'
}
라이브러리를 추가한 후에는 압축 파일의 압축 및 압축 해제 기능을 사용할 수 있습니다. 자세한 사용법은 Apache Commons Compress 문서를 참조하세요.
3. gzip 압축
gzip은 파일을 압축하는 데 사용되는 알고리즘 중 하나입니다. 자바에서는 java.util.zip.GZIPOutputStream
클래스를 사용하여 gzip 압축을 수행할 수 있습니다. GZIPOutputStream
클래스의 생성자로 압축 대상 파일을 지정하고, 데이터를 기록하면 압축된 파일이 생성됩니다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
public class GzipExample {
public static void compress(String source, String destination) throws IOException {
try (FileInputStream fileIn = new FileInputStream(source);
GZIPOutputStream gzipOut = new GZIPOutputStream(new FileOutputStream(destination))) {
byte[] buffer = new byte[1024];
int len;
while ((len = fileIn.read(buffer)) > 0) {
gzipOut.write(buffer, 0, len);
}
}
}
}
위의 예시 코드는 주어진 source 파일을 gzip 압축하여 destination 파일에 저장하는 간단한 예시입니다.
이처럼 자바에서는 다양한 데이터 압축 라이브러리를 제공하고 있으며, 프로젝트의 요구에 맞게 선택하여 사용할 수 있습니다.
자세한 내용은 각 라이브러리의 공식 문서를 참조하시기 바랍니다.