[java] Zlib 압축 알고리즘을 자바에서 사용하는 방법

Zlib은 데이터를 압축하고 해제하는 데 효과적인 알고리즘입니다. 이 알고리즘을 자바에서 사용하려면 java.util.zip 패키지의 DeflaterInflater 클래스를 사용할 수 있습니다.

압축하기

아래의 예제 코드는 Deflater 클래스를 사용하여 문자열을 압축하는 방법을 보여줍니다.

import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;

public class ZlibCompressionExample {

    public static void main(String[] args) {
        String input = "Hello, world!";
        byte[] inputData = input.getBytes();

        // Deflater 객체 생성
        Deflater deflater = new Deflater();
        deflater.setInput(inputData);

        // 압축한 데이터를 저장할 바이트 배열 출력 스트림 생성
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(outputStream, deflater);

        try {
            // 데이터를 압축하여 출력 스트림에 쓰기
            deflaterOutputStream.write(inputData);
            deflaterOutputStream.finish();

            // 압축된 데이터 얻기
            byte[] compressedData = outputStream.toByteArray();

            System.out.println("압축된 데이터: " + new String(compressedData));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 출력 스트림 닫기
            try {
                deflaterOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

해제하기

아래의 예제 코드는 Inflater 클래스를 사용하여 압축된 데이터를 해제하는 방법을 보여줍니다.

import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;

public class ZlibDecompressionExample {

    public static void main(String[] args) {
        byte[] compressedData = ... ; // 압축된 데이터

        // Inflater 객체 생성
        Inflater inflater = new Inflater();
        inflater.setInput(compressedData);

        // 해제한 데이터를 저장할 바이트 배열 출력 스트림 생성
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        InflaterInputStream inflaterInputStream = new InflaterInputStream(new ByteArrayInputStream(compressedData), inflater);

        try {
            // 데이터를 해제하여 출력 스트림에 쓰기
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inflaterInputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, length);
            }

            // 해제된 데이터 얻기
            byte[] decompressedData = outputStream.toByteArray();

            System.out.println("해제된 데이터: " + new String(decompressedData));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 출력 스트림 닫기
            try {
                inflaterInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

압축과 해제에 대한 예제 코드를 제공했습니다. 이를 참고하여 Zlib 압축 알고리즘을 자바에서 사용하는 방법을 익힐 수 있습니다.

참고 자료