Разница между Deflater и сжатием GZip

1

В настоящее время я использую java.util.zip.Deflater для сжатия. Также для сжатия может использоваться java.util.zip.GZIPOutputStream. Здесь я сосредоточен на основном сжатии массива байтов.
Может ли кто-нибудь сообщить мне разницу между этими Deflater и GZIPOutputStream. (.. производительность повышается).

Теги:
compression

2 ответа

5
Лучший ответ

Deflater производит сжатые данные zlib-wrapped с nowrap, если nowrap является истинным, и в этом случае он создает необработанные (разворачиваемые) спящие сжатые данные.

GZIPOutputStream производит gzip-wrapped deflate data.

deflate - сжатый формат данных, определенный в RFC 1951.

zlib - двухбайтовый заголовок и четырехбайтовый трейлер, который обеспечивает компактную идентификацию потока и проверку целостности несжатых данных. zlib описывается в RFC 1950.

gzip - это заголовок байта 10+ и 8-байтовый трейлер, который обеспечивает проверку метаданных и целостности, где метаданные могут включать имя файла, дату изменения, исходную операционную систему, комментарии и дополнительные данные. gzip описан в RFC 1952.

Нет никакой разницы в отношении производительности, кроме разницы в байтах в заголовке и трейлере.

0

Существует разница в производительности, поскольку GZIPOutputStream имеет только одну настройку скорости/сжатия, которая не Deflater, в то время как у Deflater есть десять возможных отношений: от самого быстрого + наименее сжатого до самого медленного + самого сжатого. Вот хорошая статья с графами об этом.

  • 1
    @MarkAdler - Java GLip НЕ позволяет НЕПОСРЕДСТВЕННО изменять настройку уровня сжатия, смотрите ее конструкторы и методы: docs.oracle.com/javase/7/docs/api/java/util/zip/… . Внутренне он имеет доступ к полю "def", которое имеет тип Deflator, который является внутренним компрессором для потока. Таким образом, можно переопределить поток, чтобы получить доступ к защищенному «def» и установить там уровень, но не напрямую через интерфейс GZip ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню