java.util.zip.GZIPOutputStream
не предоставляет аргумент конструктора или сеттер для уровня сжатия его базового Deflater
.
Есть способы обойти эту проблему, как описано здесь, например:
GZIPOutputStream gzip = new GZIPOutputStream(output) {
{
this.def.setLevel(Deflater.BEST_COMPRESSION);
}
};
I GZIPped 10G файл с этим, и его размер не уменьшался на один бит по сравнению с использованием предустановленного DEFAULT_COMPRESSION.
ответ на этот вопрос говорит, что при определенных обстоятельствах установка уровня может не работать так, как планировалось. Чтобы убедиться, я также попытался создать новый Deflater
:
this.def = new Deflater(Deflater.BEST_COMPRESSION, true);
Но не уменьшает размер файла...
Есть ли причина, по которой они не обеспечивали доступ к уровню Deflater
?
Или что-то не так с примером кода выше?
Работает ли уровень deflater вообще?
Изменить: спасибо за комментарии.
-
Может ли файл быть сжат дальше?
Это текстовый файл UTF-8, сжатый с 10G до 10M, используя По умолчанию сжатие. Поэтому, не зная подробностей о уровень сжатия, я полагал, что он может быть сжат дальше.
-
Разница во времени между
DEFAULT_COMPRESSION
иBEST_COMPRESSION
?У меня нет времени создавать действительно надежные цифры. Но я выполнил код с каждым уровнем сжатия примерно пять раз и оба заняли примерно одно и то же время (2 минуты +/- 5 секунд).
-
Размер файла с помощью
gzip -v9
? Файл, созданный gzip, примерно на 15 КБ меньше, чем файл, созданный java. Итак, для моего конкретного случая использования это не стоит больше изучать эту тему.
Однако три основных вопроса, изложенных выше, все еще сохраняются. Любой когда-либо успешно уменьшал файл, используя более высокие уровни сжатия с GZIPOutputStream
?