[java] 자바에서 Bzip2 압축 알고리즘 사용하기

Bzip2는 파일을 더 작은 크기로 압축하기 위한 압축 알고리즘으로 널리 사용되고 있습니다. 이 알고리즘은 자바에서도 사용할 수 있으며, 이 글에서는 자바에서 Bzip2 압축 알고리즘을 사용하는 방법에 대해 알아보겠습니다.

Bzip2 라이브러리 추가하기

먼저, 자바 프로젝트에 Bzip2 라이브러리를 추가해야 합니다. Bzip2 라이브러리는 Apache Commons Compress를 이용하여 다운로드할 수 있습니다.

Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'org.apache.commons:commons-compress:1.21'

의존성을 추가한 후, 프로젝트를 다시 빌드해주세요.

Bzip2 압축하기

이제 Bzip2 알고리즘을 사용하여 파일을 압축하는 방법을 알아보겠습니다. 아래 코드는 주어진 파일을 Bzip2 압축하여 새로운 파일로 저장하는 예시입니다.

import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Bzip2CompressionExample {
    public static void compressFile(String sourceFile, String compressedFile) throws IOException {
        FileInputStream fis = new FileInputStream(sourceFile);
        FileOutputStream fos = new FileOutputStream(compressedFile);
        BZip2CompressorOutputStream bzos = new BZip2CompressorOutputStream(fos);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            bzos.write(buffer, 0, len);
        }

        bzos.finish();
        bzos.close();
        fos.close();
        fis.close();
    }

    public static void main(String[] args) {
        String sourceFile = "path/to/sourceFile.txt";
        String compressedFile = "path/to/compressedFile.bz2";

        try {
            compressFile(sourceFile, compressedFile);
            System.out.println("File compressed successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 sourceFile 변수에 압축할 원본 파일의 경로를, compressedFile 변수에 압축된 파일을 저장할 경로를 지정하고 실행하면 압축이 완료됩니다.

Bzip2 압축 풀기

압축된 Bzip2 파일을 원본 파일로 풀기 위해서는 다음과 같은 코드를 사용할 수 있습니다.

import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Bzip2DecompressionExample {
    public static void decompressFile(String compressedFile, String decompressedFile) throws IOException {
        FileInputStream fis = new FileInputStream(compressedFile);
        FileOutputStream fos = new FileOutputStream(decompressedFile);
        BZip2CompressorInputStream bzip2Is = new BZip2CompressorInputStream(fis);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = bzip2Is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }

        bzip2Is.close();
        fos.close();
        fis.close();
    }

    public static void main(String[] args) {
        String compressedFile = "path/to/compressedFile.bz2";
        String decompressedFile = "path/to/decompressedFile.txt";

        try {
            decompressFile(compressedFile, decompressedFile);
            System.out.println("File decompressed successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 compressedFile 변수에 압축된 파일의 경로를, decompressedFile 변수에 압축 해제된 파일을 저장할 경로를 지정하고 실행하면 압축이 해제됩니다.

결론

이제 자바에서 Bzip2 압축 알고리즘을 사용하는 방법에 대해 알아보았습니다. Bzip2 압축은 파일 크기를 줄일 수 있어 네트워크 전송이나 파일 저장에 용이합니다. 자바에서 Bzip2 압축 알고리즘을 사용하여 파일을 압축하거나 해제할 수 있으니, 필요한 경우에는 위 코드를 참고하여 사용하시기 바랍니다.