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)을 활용하면 성능을 크게 향상시킬 수 있습니다.