[java] 자바에서 제공하는 데이터 압축 라이브러리

자바는 데이터 압축을 위한 다양한 라이브러리를 제공합니다. 이러한 라이브러리를 사용하면 데이터를 압축하거나 압축 해제할 수 있으며, 용량을 절약하고 전송 시간을 단축시킬 수 있습니다.

아래는 자바에서 제공하는 주요 데이터 압축 라이브러리입니다.

1. java.util.zip 패키지

java.util.zip 패키지는 자바에서 기본적으로 제공하는 데이터 압축 라이브러리입니다. 이 패키지는 ZIP 파일 형식을 생성하고 압축된 파일을 읽을 수 있는 기능을 제공합니다. ZipOutputStreamZipInputStream 클래스를 통해 압축 및 압축 해제 작업을 수행할 수 있습니다.

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 파일에 저장하는 간단한 예시입니다.

이처럼 자바에서는 다양한 데이터 압축 라이브러리를 제공하고 있으며, 프로젝트의 요구에 맞게 선택하여 사용할 수 있습니다.

자세한 내용은 각 라이브러리의 공식 문서를 참조하시기 바랍니다.