Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 파일 압축 해제하기: InflaterInputStream 사용 방법


Java는 InflaterInputStream이라는 클래스를 제공하며, 이 클래스는 압축된 파일의 압축을 해제(uncompress)하는 데 사용됩니다.

이 클래스의 read() 메서드는 입력 스트림에서 압축된 데이터를 한 번에 한 바이트씩 읽어옵니다. 이 메서드를 활용하여 압축 파일의 압축을 해제하는 절차는 다음과 같습니다.

  • FileInputStream 객체를 생성하고, 생성자의 매개변수로 압축 파일의 경로를 String 형식으로 전달합니다.
  • FileOutputStream 객체를 생성하고, 생성자의 매개변수로 출력 파일(압축이 해제된 결과 파일)의 경로를 String 형식으로 전달합니다.
  • 위에서 생성한 FileInputStream 객체를 매개변수로 전달하여 InflaterInputStream 객체를 생성합니다.
  • InflaterInputStream 객체에서 내용을 한 바이트씩 읽어 들인 뒤, FileOutputStream 클래스의 write() 메서드를 사용해 출력 파일에 기록합니다.

예제 코드

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;

public class DeCompressingFiles {
    public static void main(String args[]) throws IOException {
        String inputPath = "D:\\ExampleDirectory\\compressed.txt";
        // FileInputStream 객체 생성
        FileInputStream inputStream = new FileInputStream(inputPath);

        String outputPath = "D:\\ExampleDirectory\\output.jpg";
        FileOutputStream outputStream = new FileOutputStream(outputPath);

        InflaterInputStream decompresser = new InflaterInputStream(inputStream);

        int contents;
        while ((contents = decompresser.read()) != -1) {
            outputStream.write(contents);
        }

        // 파일 닫기
        outputStream.close();
        decompresser.close();
        System.out.println("File un-compressed.......");
    }
}

실행 결과

File un-compressed.......

프로그램이 정상적으로 실행되면 콘솔에 위와 같은 메시지가 출력되며, 지정한 출력 경로에 압축이 해제된 파일이 생성됩니다.

참고: 실무에서는 try-with-resources 구문을 사용하여 스트림을 자동으로 닫아주는 것이 좋으며, 대용량 파일의 경우 버퍼(byte[] 배열 또는 BufferedInputStream)을 활용하면 성능을 크게 향상시킬 수 있습니다.