2011-07-10 13 views
14

GZIPOutputStream es solo una subclase de DeflaterOutputStream pero se pueden crear instancias de ambos. ¿Cuándo uso uno sobre el otro? ¿La compresión es la misma?¿Cuál es la diferencia entre GZIPOutputStream y DeflaterOutputStream?

+0

Además de las respuestas, GZIP es interesante ya que la salida será compatible con muchas herramientas sin tener que saltar aros, como zcat, zgrep y herramientas que pueden abrir archivos gz. – Hay

Respuesta

14

Las diferencias entre DeflaterOutputStream, ZIPOutputStream, y GZIPOutputStream reflejan la diferencia entre sus predecesores históricos de compresión:

respectivamente. Deflate se puede considerar la implementación de referencia del algoritmo de compresión, mientras que ZIP y GZIP son 'extensiones' de él. Ambos últimos respaldan el concepto de 'archivos', que es mucho más evidente en la API de Java para ZipOutputStream.

Si simplemente está tratando de comprimir un flujo de datos que recomendaría el uso de la DeflaterOutputStream, pero si va a crear un archivo que probablemente debería mirar en ZipOutputStream lugar.

4

DeflaterOutputStream implementa el método de compresión de desinflado sin procesar. GZIPOutputStream agrega lógica adicional requerida para GZIP: comprobación de CRC-32, el número mágico de GZIP, encabezado GZIP, tráiler, etc. Consulte la fuente para GZIPOutputStream.java y DeflaterOutputStream.java. Vea también Compressing and Decompressing Data Using Java APIs.

+0

En el enlace de respuesta original no funciona: [Comprimir y descomprimir datos usando API de Java] (http://www.oracle.com/technetwork/articles/java/compress-1565076.html) – kant

1

La diferencia está en el formato de compresión específico utilizado. Desde el javadoc para DeflaterOutputStream:

public class DeflaterOutputStream 
extends FilterOutputStream 

This class implements an output stream filter for compressing data in the "deflate" compression format. It is also used as the basis for other types of compression filters, such as GZIPOutputStream. 

GZIPOutputStream says:

public class GZIPOutputStream 
extends DeflaterOutputStream 

This class implements a stream filter for writing compressed data in the GZIP file format. 

La corriente GZIP se extiende la aplicación desinflado con detalles adicionales específicos para el formato de archivo GZIP.

Cuestiones relacionadas