В чем разница между GZIPOutputStream и DeflaterOutputStream? - PullRequest
17 голосов
/ 10 июля 2011

GZIPOutputStream - это просто подкласс DeflaterOutputStream, но оба могут быть созданы.Когда я использую один поверх другого?Сжатие одинаковое?

Ответы [ 3 ]

17 голосов
/ 10 июля 2011

Различия между DeflaterOutputStream , ZIPOutputStream и GZIPOutputStream отражают разницу между их историческими предшественниками сжатия:

соответственно. Deflate можно рассматривать как эталонную реализацию алгоритма сжатия, в то время как ZIP и GZIP являются его «расширениями». Оба последних поддерживают концепцию «архивов», что гораздо более очевидно в Java API для ZipOutputStream.

Если вы просто пытаетесь сжать поток данных, я бы порекомендовал использовать DeflaterOutputStream, но если вы создаете архив, вам, вероятно, следует вместо этого взглянуть на ZipOutputStream.

5 голосов
/ 10 июля 2011

DeflaterOutputStream реализует метод необработанного сжатия. GZIPOutputStream добавляет дополнительную логику, необходимую для GZIP: проверку CRC-32, магический номер GZIP, заголовок GZIP, трейлер и т. Д. См. Источник для GZIPOutputStream.java и DeflaterOutputStream.java .

1 голос
/ 10 июля 2011

Разница заключается в конкретном используемом формате сжатия.Из javadoc для 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 говорит :

public class GZIPOutputStream
extends DeflaterOutputStream

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

Поток GZIP расширяет реализацию Deflate дополнительными подробностямив файл формата GZIP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...