logo

Java에서 파일 압축 및 압축 풀기

파일 내용을 압축하고 압축을 풀기 위해 DeflaterOutputStream 및 InflaterInputStream 클래스가 Java로 제공됩니다. 이러한 클래스는 파일 콘텐츠를 압축하는 데 사용할 수 있는 유용한 방법을 제공합니다.

DeflaterOutputStream을 사용하여 파일 압축

이 클래스는 'deflate' 압축 형식으로 데이터를 압축하기 위한 출력 스트림 필터를 구현합니다. 또한 GZIPOutputStream과 같은 다른 유형의 압축 필터의 기초로도 사용됩니다. 중요한 방법:
    무효 닫기() : 압축된 나머지 데이터를 출력 스트림에 쓰고 기본 스트림을 닫습니다. 보호된 무효 deflate():압축된 데이터의 다음 블록을 출력 스트림에 씁니다. 무효 마무리() : 기본 스트림을 닫지 않고 출력 스트림에 압축된 데이터 쓰기를 완료합니다. 무효 플러시() :  void write(byte[] b int off int len) :압축된 출력 스트림에 바이트 배열을 씁니다. 여기서 off는 데이터의 시작 오프셋이고 len은 총 바이트 수입니다. 무효 쓰기(int b) :압축된 출력 스트림에 바이트를 씁니다.
  • 데이터를 읽기 위해 입력 파일 'file 1'을 FileInputStream으로 가져옵니다.
  • 출력 파일 'file 2'를 가져와서 FileOutputStream에 할당합니다. 이는 'file2'에 데이터를 쓰는 데 도움이 됩니다.
  • 데이터 압축을 위해 FileOutputStream을 DeflaterOutputStream에 할당합니다.
  • 이제 FileInputStream에서 데이터를 읽고 DeflaterOutputStream에 씁니다. 데이터를 압축하고 압축된 데이터를 출력 파일에 저장하는 FileOutputStream으로 보냅니다.
Java
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; class zip {  public static void main(String[] args) throws IOException {  //Assign the original file : file to  //FileInputStream for reading data  FileInputStream fis=new FileInputStream('file1');  //Assign compressed file:file2 to FileOutputStream  FileOutputStream fos=new FileOutputStream('file2');  //Assign FileOutputStream to DeflaterOutputStream  DeflaterOutputStream dos=new DeflaterOutputStream(fos);  //read data from FileInputStream and write it into DeflaterOutputStream  int data;  while ((data=fis.read())!=-1)  {  dos.write(data);  }  //close the file  fis.close();  dos.close();  } } 

InflaterInputStream을 사용하여 파일 압축 풀기

이 클래스는 'deflate' 압축 형식의 데이터 압축을 풀기 위한 스트림 필터를 구현합니다. 또한 GZIPInputStream과 같은 다른 압축 해제 필터의 기초로도 사용됩니다. 중요한 방법:
    정수 사용 가능() : EOF에 도달하면 0을 반환하고 그렇지 않으면 항상 1을 반환합니다. 무효 닫기() : 입력 스트림을 닫고 스트림과 연결된 모든 시스템 리소스를 해제합니다. 보호된 무효 채우기() : 압축을 풀기 위해 더 많은 데이터로 입력 버퍼를 채웁니다. 입력 스트림의 현재 위치를 표시합니다. 부울 마크지원(): 입력 스트림이 표시 및 재설정 방법을 지원하는지 테스트합니다. 정수 읽기() :  int read(byte[] b int off int len) : 압축 해제된 데이터를 압축된 출력 스트림에 대한 바이트 배열로 읽어옵니다. 여기서 off는 데이터의 시작 오프셋이고 len은 총 바이트 수입니다. 무효 재설정() : 이 입력 스트림에서 mark 메소드가 마지막으로 호출된 시점의 위치로 이 스트림의 위치를 ​​변경합니다.
파일 압축을 푸는 단계
  • 이제 'file2'라는 이름의 파일에는 압축된 데이터가 포함되어 있으므로 이 파일에서 압축이 풀린 원본 데이터를 가져와야 합니다.
  • FileInputStream에 압축 파일 'file2'를 할당합니다. 이는 'file2'에서 데이터를 읽는 데 도움이 됩니다.
  • FileOutputStream에 출력 파일 'file3'을 할당합니다. 이는 압축되지 않은 데이터를 'file3'에 쓰는 데 도움이 됩니다.
  • 이제 InflaterInputStream에서 압축되지 않은 데이터를 읽고 FileOutputStream에 씁니다. 그러면 압축되지 않은 데이터가 'file3'에 기록됩니다.
Java
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.InflaterInputStream; //Uncompressing a file using an InflaterInputStream class unzip {  public static void main(String[] args) throws IOException {  //assign Input File : file2 to FileInputStream for reading data  FileInputStream fis=new FileInputStream('file2');  //assign output file: file3 to FileOutputStream for reading the data  FileOutputStream fos=new FileOutputStream('file3');    //assign inflaterInputStream to FileInputStream for uncompressing the data  InflaterInputStream iis=new InflaterInputStream(fis);    //read data from inflaterInputStream and write it into FileOutputStream   int data;  while((data=iis.read())!=-1)  {  fos.write(data);  }    //close the files  fos.close();  iis.close();    } } 
  퀴즈 만들기