Как вывести результаты дефлятора в формате GZIP? - PullRequest
0 голосов
/ 27 октября 2011

Я использую Java.

Я хочу использовать класс Deflater для дефлирования некоторого ввода, затем я хочу вывести его в формате GZIP, чтобы его можно было разархивировать с помощью GZIP. Как я могу это сделать? Насколько я понимаю, он выведет его в другом формате. Я новичок, так что если вы могли бы быть явным и, возможно, привести пример кода, который был бы очень полезным.

Я не могу использовать GZIPOutputStream, потому что мне нужно использовать некоторые специфические функции класса Deflater перед выводом.

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Очевидно, GZIPOutputStream использует Deflater под капотом, так что вы не пытаетесь сделать что-нибудь безумное.

Одна из возможностей (из этой страницы , которая, вероятно, стоит прочитать) - это создать подкласс GZIPOutputStream, чтобы вы могли получить доступ к его Deflater объекту. Что-то более или менее подобное (не проверено):

public class MyGZIPOutputStream extends GZIPOutputStream {

  public MyGZIPOutputStream(final OutputStream out) throws IOException {
    super(out);
  }

  public void setDictionary(byte[] b) {
    def.setDictionary(b);
  }

}

Затем вы можете сделать вызов setDictionary перед использованием MyGZIPOutputStream для сохранения файла.

Переменная def является защищенным членом GZIPOutputStream, поэтому для доступа к ней необходимо создать подклассы.

0 голосов
/ 27 октября 2011

Первый вопрос: почему?

GZIP. Вывод Deflater означает, что получатель должен и GUnzip, и раздувать.

GZIPВыход из Deflater может увеличить размер. Это, конечно, не будет сжимать это значительно.

Если вам нужен вывод GZIP, забудьте о Deflater.

Если вам нужен словарь, забудьте о выводе GZIP.

...