Java implementa la descompresión zip y las funciones de compresión básicamente utilizan los polipéptidos y la tecnología de recursión de Java, que puede comprimir y descomprimir archivos individuales y cualquier carpeta en cascada, lo cual es un muy buen ejemplo para algunos principiantes.
Zip juega dos roles: archivo y compresión; GZIP no archiva archivos, pero solo comprime un solo archivo. Por lo tanto, en las plataformas UNIX, el alquitrán de comando generalmente se usa para crear un archivo de archivo y luego comando GZIP para comprimir el archivo de archivo.
La biblioteca de clases de E/S Java también incluye algunas clases que pueden leer y escribir transmisiones de formato comprimido. Para proporcionar funciones de compresión, solo envuélvalos fuera de las clases de E/S existentes. Estas clases no son lector y escritor, sino subclases de InputStream y Outstreamput. Esto se debe a que el algoritmo de compresión está dirigido a byte en lugar de caracteres.
Clases e interfaces relacionadas:
Interfaz de suma de verificación: una interfaz implementada por las clases ADLER32 y CRC32
ADLER32: Use el algoritmo Alder32 para calcular el número de suma de verificación
CRC32: Use el algoritmo CRC32 para calcular el número de suma de verificación
CheckEdInputStream: Clase derivada InputStream, puede obtener la suma de verificación de la secuencia de entrada, que se utiliza para verificar la integridad de los datos.
CheckEdOutputStream: Clase derivada de OutputStream, puede obtener la suma de verificación de la secuencia de salida, utilizada para verificar la integridad de los datos
DeFlAterOutputStream: la clase base de la clase comprimida.
ZipOutputStream: una subclase de DeFlAterOutputStream que comprime los datos en formato de archivo ZIP.
GzipoutputStream: una subclase de DeFlAterOutputStream que comprime los datos en el formato de archivo GZIP
InflaterInputStream: clase base para descompresión
ZipInputStream: una subclase de inflaterInputStream, que puede descomprimir los datos del formato de zip
GzipinputStream: una subclase de inflaterInputStream, que puede descomprimir los datos del formato de zip
Clase ZipEntry: representa una entrada de archivo zip
Clase ZipFile: esta clase se usa para leer entradas de archivos zip
Use zip para comprimir y descomprimir múltiples archivos
Java admite la biblioteca de formato ZIP de una manera relativamente completa, y es necesario usarla para comprimir múltiples archivos en un paquete comprimido. Esta biblioteca de clases utiliza el formato ZIP estándar, por lo que es compatible con muchas herramientas de compresión.
La clase ZIPoutputStream tiene el método de compresión establecido y el nivel de compresión utilizado en el método de compresión. ZipOutputStream.setMethod (método int) Establece el método de compresión predeterminado utilizado para las entradas. Mientras no se especifique el método de compresión para una sola entrada de archivo ZIP, se almacena el método de compresión establecido por ZipOutputStream. El valor predeterminado es zipoutputstream.deflated (indica el almacenamiento de compresión) y también se puede configurar en almacenamiento (indica solo el almacenamiento del archivo del paquete). Después de que ZipOutputStream ha establecido el método de compresión en desinflado, podemos usar aún más el método SetLevel (INT Nivel) para establecer el nivel de compresión. El valor de nivel de compresión es 0-9, con un total de 10 niveles (cuanto mayor sea el valor, más probabilidades tendrá de comprimir). El valor predeterminado es deflater.default_compression = -1. Por supuesto, también podemos establecer el método de compresión para una sola condición a través del método SetMethod del zipentry de entrada.
La clase ZipEntry describe un archivo comprimido almacenado en un archivo zip. La clase contiene múltiples métodos para configurar y obtener información sobre las entradas zip. La clase ZipEntry es utilizada por ZipFile [zipfile.getInputStream (entrada zipentry)] y zipInputStream para leer el archivo zip, y zipoutputstream para escribir en el archivo zip. Hay algunos métodos útiles: getName () Devuelve el nombre de entrada, ISDirectory () Devuelve True si es una entrada de directorio (la entrada de directorio se define como una entrada cuyo nombre termina con '/'), setmethod (int Method) Establezca el método de compresión para la entrada, que puede ser ZipOutputStream o ZipOutStream.
En el siguiente ejemplo, utilizamos el kit de herramientas ZIP Apache (el paquete es Ant.jar), porque el tipo Java viene con él no admite las rutas chinas, pero las dos se usan de la misma manera, pero la herramienta de compresión Apache tiene más interfaces para establecer métodos de codificación, y los otros son básicamente las mismas. Además, si usa org.apache.tools.zip.zipoutputstream para comprimir, solo podemos usar org.apache.tools.zip.zipentry para descomprimir y no podemos usar java.util.zip.zipinputstream para descomprimir y leer. Por supuesto, Apache no proporciona la clase ZipInputStream.
Compresión de archivo:
paquete gizaction; import java.io. *; import java.util.zip. *;/** * @author dana ・ li * <p> * El programa implementa la compresión zip [compresión] * <p> * Las funciones generales incluyen el uso del polimorfismo, la recursión y otras tecnologías del núcleo de java, que puede compreser y decompres a un archivo único y un archivo de un solo archivo y un archivo de polimorfismo, recursión y otras tecnologías del núcleo de java, que puede comprar y decompres a un archivo único y cualquier archivo y un archivo de polimorfismo. La ruta de entrada de origen y la ruta de salida de destino deben personalizarse en el código. * <P> * En esta sección del código, la parte de compresión se implementa */public class ZipCompressing {private int k = 1; // Definir la variable de número recursivo Void Private Void Zip (String ZipFileName, File InputFile) lanza la excepción {System.out.println ("Compressing ..."); ZipOutputStream out = new ZipOutputStream (nuevo FileOutputStream (ZipFileName)); BufferedOutputStream bo = new BufferedOutputStream (Out); zip (out, inputFile, inputFile.getName (), bo); Bo.close (); out.close (); // Salida de la transmisión Cerrar System.out.println ("Compresión completada"); } private void zip (zipoutputStream out, archivo f, string base, bufferedOutputStream bo) lanza la excepción {// sobrecarga del método if (f.isDirectory ()) {file [] fl = f.listFiles (); if (fl.length == 0) {out.putNextEntry (new ZipEntry (base + "/")); // crear zip compresión de entrada de punto base system.out.println (base + "/"); } for (int i = 0; i <fl.length; i ++) {zip (out, fl [i], base + "/" + fl [i] .getName (), bo); // Subcolcetas recursivamente atraviesas} System.out.println ("th" + k + "sub-recursivo"); K ++; } else {out.putNextEntry (new ZipEntry (base)); // crear zip compresión de entrada de punto base system.out.println (base); FileInputStream in = new FileInputStream (f); BufferedInputStream BI = new BufferedInputStream (in); int b; while ((b = bi.read ())! = -1) {bo.write (b); // Escribe el flujo de byte en el directorio ZIP actual} bi.close (); cercar(); // Input Stream Close}}/ *** test* @param args*/ public static void main (string [] args) {ZipCompressing Book = new ZipCompressing (); Pruebe {book.zip ("f: //ziptest.zip", nuevo archivo ("f: // ziptest")); } catch (Exception e) {E.PrintStackTrace (); }}}Decompresión de archivo:
package gizAction;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.zipinputstream;/** * @author dana ・ li * <p> * El programa implementa la descompresión zip [descompresión] * <p> * Las funciones generales incluyen el uso de las tecnologías centrales de Java polimórficas y de recursión, que pueden comprimir y descompresiones individuales y cualquier cancisco. La ruta de entrada de origen y la ruta de salida de destino deben personalizarse en el código. * <p> * En este código, se implementa la parte de descompresión; */ public class ZipDecompressing {public static void main (string [] args) {// tODO método generado automático stub long starttime = system.currentTimemillis (); Pruebe {ZipInputStream zin = new ZipInputStream (nuevo FileInputStream ("f: //ziptest.zip")); // Intruper la ruta ZIP BUFFEREDINPutStream bin = new BufferedInputStream (Zin); Cadena parent = "f: // ziptest //"; // ruta de salida (directorio de carpetas) archivo fout = null; Entrada ZipEntry; Pruebe {while ((entry = zin.getNextEntry ())! = NULL &&! Entry.isDirectory ()) {fout = new File (parent, entry.getName ()); if (! fout.exists ()) {(nuevo archivo (fout.getParent ())). mkdirs (); } FileOutputStream out = new FileOutputStream (fout); BufferedOutputStream Bout = new BufferedOutputStream (Out); int b; while ((b = bin.read ())! =-1) {bout.write (b); } Bout.close (); out.close (); System.out.println (fout+"descompresión con éxito"); } Bin.close (); Zin.close (); } catch (ioException e) {E.PrintStackTrace (); }} Catch (FileNotFoundException e) {E.PrintStackTrace (); } Long EndTime = System.CurrentTimemillis (); System.out.println ("Consumir el tiempo:"+(endtime-starttime)+"ms"); }}Comprimir un solo archivo con GZIP
La interfaz de GZIP es relativamente simple, por lo que si solo necesita comprimir una transmisión, puede usarla. Por supuesto, puede comprimir corrientes de caracteres y comprimir corrientes de bytes. A continuación se muestra un archivo de texto que comprime el formato de codificación GBK.
El uso de clases de compresión es muy simple; Simplemente use GzipoutputStream o ZipOutputStream para envolver la secuencia de salida, y luego use GzipinputStream o ZipInputStream para envolver la secuencia de entrada. El resto son algunas operaciones de E/S ordinarias.
import java.io.bufferedOutputStream; import java.io.bufferedReader; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; import java.io.inputstreamreamreader; import java.util.zip.gzipinputstream; import java.util.zip.gzipoutputstream; public class gzipcompress {public static void main (string [] args) lanza ioexception {// Prepárese para comprimir un archivo de caracteres. Tenga en cuenta que el archivo de caracteres aquí es un bufferedReader de codificación GBK en = new BufferedReader (new InputStreamReader (new FileInputStream ("E: /tmp/source.txt"), "GBK")); // Use GzipoutputStream para envolver la transmisión de salida de salida para hacer sus características de compresión específicas, y finalmente se generará un paquete de compresión test.txt.gz // y hay un archivo llamado test.txt en topeDoutputStream out = new Bufferedutputputputputsam (nuevo GzIPoutPutPutream (nuevo FileOutputStream ("test.txt.gz out")); System.out.println ("Comience a escribir archivos comprimidos ..."); int c; Mientras ((c = in.read ())! = -1) { / * * tenga en cuenta, aquí hay un archivo de caracteres que se lee en las secuencias de caracteres, y C no se puede almacenar directamente, porque C ya está unicode * código, que perderá información (por supuesto, el formato de codificación en sí es incorrecto), por lo que debe resolverse con GBK y luego almacenarse. */ out.write (string.ValueOf ((char) c) .getBytes ("gbk")); } in.close (); out.close (); System.out.println ("Comience a leer el archivo comprimido ..."); // Use gzipinputStream para envolver la secuencia de inputStream para que descomprimiera BufferedReader in2 = new BufferedReader (new InputStreamReader (new GzipInputStream (new FileInputStream ("test.txt.gz")), "GBK")); Cadena S; // lee el contenido en el archivo comprimido mientras ((s = in2.readline ())! = Null) {system.out.println (s); } in2.Close (); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.