logo

Bestanden comprimeren en decomprimeren in Java

In Java zijn de klassen DeflaterOutputStream en InflaterInputStream beschikbaar om de bestandsinhoud te comprimeren en decomprimeren. Deze klassen bieden handige methoden die kunnen worden gebruikt voor het comprimeren van de bestandsinhoud.

Een bestand comprimeren met DeflaterOutputStream

Deze klasse implementeert een uitvoerstroomfilter voor het comprimeren van gegevens in het 'deflate'-compressieformaat. Het wordt ook gebruikt als basis voor andere soorten compressiefilters zoals GZIPOutputStream. Belangrijke methoden:
    leegte close() : Schrijft de resterende gecomprimeerde gegevens naar de uitvoerstroom en sluit de onderliggende stroom. beschermde leegte leeglopen() :Schrijft het volgende blok met gecomprimeerde gegevens naar de uitvoerstroom. ongeldige afwerking() : Voltooit het schrijven van gecomprimeerde gegevens naar de uitvoerstroom zonder de onderliggende stroom te sluiten. leegte flush() : Spoelt de gecomprimeerde uitvoerstroom door. void write(byte[] b int uit int len) :Schrijft een array van bytes naar de gecomprimeerde uitvoerstroom, waarbij off de startoffset van gegevens is en len het totale aantal bytes. ongeldig schrijven(int b):Schrijft een byte naar de gecomprimeerde uitvoerstroom.
Stappen om een ​​bestand te comprimeren (bestand 1)
  • Neem een ​​invoerbestand ‘bestand 1’ mee naar FileInputStream voor het lezen van gegevens.
  • Neem het uitvoerbestand ‘file 2’ en wijs het toe aan FileOutputStream . Dit zal helpen om gegevens in ‘file2’ te schrijven.
  • Wijs FileOutputStream toe aan DeflaterOutputStream om de gegevens te comprimeren.
  • Lees nu gegevens uit FileInputStream en schrijf deze naar DeflaterOutputStream. Het comprimeert de gegevens en stuurt deze naar FileOutputStream, die de gecomprimeerde gegevens in het uitvoerbestand opslaat.
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();  } } 

Een bestand decomprimeren met InflaterInputStream

Deze klasse implementeert een streamfilter voor het decomprimeren van gegevens in het 'deflate'-compressieformaat. Het wordt ook gebruikt als basis voor andere decompressiefilters zoals GZIPInputStream. Belangrijke methoden:
    int beschikbaar() : Retourneert 0 nadat EOF is bereikt, retourneert anders altijd 1. leegte close() : Sluit de invoerstroom en geeft alle systeembronnen vrij die aan de stroom zijn gekoppeld. beschermde leegte opvulling() : Vult de invoerbuffer met meer gegevens om te decomprimeren. ongeldige markering(int leeslimiet): Markeert de huidige positie in de invoerstroom. booleaanse markSupported() : Test of de invoerstroom de markerings- en resetmethoden ondersteunt. int lezen() : Leest een byte aan ongecomprimeerde gegevens. int read(byte[] b int uit int len) : Leest gedecomprimeerde gegevens in een array van bytes naar de gecomprimeerde uitvoerstroom, waarbij off de startoffset van gegevens is en len het totale aantal bytes. ongeldige reset() : Herpositioneert deze stream naar de positie op het moment dat de markeringsmethode voor het laatst werd aangeroepen op deze invoerstream.
Stappen om een ​​bestand te decomprimeren
  • Bestand met de naam ‘file2’ bevat nu gecomprimeerde gegevens en we moeten originele gedecomprimeerde gegevens uit dit bestand verkrijgen.
  • Wijs het gecomprimeerde bestand ‘file2’ toe aan FileInputStream. Dit helpt om gegevens uit ‘file2’ te lezen.
  • Wijs het uitvoerbestand ‘file3’ toe aan FileOutputStream. Dit zal helpen om ongecomprimeerde gegevens in ‘file3’ te schrijven.
  • Lees nu de ongecomprimeerde gegevens van InflaterInputStream en schrijf deze naar FileOutputStream. Hierdoor worden de niet-gecomprimeerde gegevens naar ‘file3’ geschreven.
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();    } } 
  Quiz maken