Класс Deflater
- java.lang.Object
-
- java.util.zip.Deflater
public class Deflater extends Object
Этот класс предоставляет поддержку сжатия общего назначения с использованием популярной библиотеки сжатия ZLIB. Библиотека сжатия ZLIB первоначально была разработана как часть стандарта графики PNG и не защищена патентами. Она полностью описана в спецификациях в описании пакета java.util.zip.
Этот класс сжимает последовательности байтов в сжатый формат ZLIB. Последовательность входных байтов предоставляется либо в виде массива байтов, либо в виде буфера байтов, через один из setInput() методов. Последовательность выходных байтов записывается в массив выходных байтов или буфер байтов, переданные в deflate() методы.
Следующий фрагмент кода демонстрирует тривиальное сжатие и распаковку строки, используя Deflater и Inflater.
try {
// Encode a String into bytes
String inputString = "blahblahblah";
byte[] input = inputString.getBytes("UTF-8");
// Compress the bytes
byte[] output = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
compresser.end();
// Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(output, 0, compressedDataLength);
byte[] result = new byte[100];
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
} catch (java.io.UnsupportedEncodingException ex) {
// handle
} catch (java.util.zip.DataFormatException ex) {
// handle
}
- Примечание API:
- Для освобождения ресурсов, используемых этим
Deflater, методend()следует вызвать явно. Подклассы отвечают за очистку ресурсов, полученных подклассом. Подклассы, которые переопределяютfinalize()для выполнения очистки, должны быть изменены, чтобы использовать альтернативные механизмы очистки, такие какCleaner, и удалить переопределённыйfinalizeметод. - Требования к реализации:
- Если этот
Deflaterбыл подклассифицирован, и методendбыл переопределён, методendбудет вызван завершением, когда сжиматель станет недоступен. Однако подклассы не должны полагаться на эту конкретную реализацию; завершение не является надёжным, а методfinalizeустарел и будет удалён. - С:
- 1.1
- См. также:
Inflater
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static int | BEST_COMPRESSION | Уровень сжатия для наилучшего сжатия. |
static int | BEST_SPEED | Уровень сжатия для самого быстрого сжатия. |
static int | DEFAULT_COMPRESSION | Уровень сжатия по умолчанию. |
static int | DEFAULT_STRATEGY | Стратегия сжатия по умолчанию. |
static int | DEFLATED | Метод сжатия для алгоритма deflate (единственный в настоящее время поддерживаемый). |
static int | FILTERED | Стратегия сжатия, наиболее эффективная для данных, состоящих в основном из малых значений с несколько случайным распределением. |
static int | FULL_FLUSH | Режим сжатия, используемый для сброса всех ожидаемых выходных данных и сброса сжимателя. |
static int | HUFFMAN_ONLY | Стратегия сжатия только для кодирования Хаффмана. |
static int | NO_COMPRESSION | Уровень сжатия без сжатия. |
static int | NO_FLUSH | Режим сжатия, используемый для достижения наилучшего результата сжатия. |
static int | SYNC_FLUSH | Режим сжатия, используемый для сброса всех ожидаемых выходных данных; может ухудшить сжатие для некоторых алгоритмов сжатия. |
Конструкторы
| Конструктор | Описание |
|---|---|
Deflater() | Создаёт новый сжиматель с уровнем сжатия по умолчанию. |
Deflater(int level) | Создаёт новый сжиматель, используя указанный уровень сжатия. |
Deflater(int level,
boolean nowrap) | Создаёт новый сжиматель, используя указанный уровень сжатия. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
int | deflate(byte[] output) | Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int | deflate(byte[] output,
int off,
int len) | Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int | deflate(byte[] output,
int off,
int len,
int flush) | Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int | deflate(ByteBuffer output) | Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int | deflate(ByteBuffer output,
int flush) | Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
void | end() | Закрывает сжиматель и отбрасывает любые необработанные входные данные. |
protected void | finalize() | Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Метод finalize устарел и будет удалён. |
void | finish() | При вызове указывает, что сжатие должно завершиться текущим содержимым буфера ввода. |
boolean | finished() | Возвращает true, если достигнут конец потока выходных данных сжатых данных. |
int | getAdler() | Возвращает значение ADLER-32 несжатых данных. |
long | getBytesRead() | Возвращает общее количество несжатых байтов, введённых до сих пор. |
long | getBytesWritten() | Возвращает общее количество сжатых байтов, выведенных до сих пор. |
int | getTotalIn() | Возвращает общее количество несжатых байтов, введённых до сих пор. |
int | getTotalOut() | Возвращает общее количество сжатых байтов, выведенных до сих пор. |
boolean | needsInput() | Возвращает true, если в буфере ввода больше нет данных. |
void | reset() | Сбрасывает сжиматель, чтобы можно было обработать новый набор входных данных. |
void | setDictionary(byte[] dictionary) | Устанавливает предопределённый словарь для сжатия. |
void | setDictionary(byte[] dictionary,
int off,
int len) | Устанавливает предопределённый словарь для сжатия. |
void | setDictionary(ByteBuffer dictionary) | Устанавливает предопределённый словарь для сжатия. |
void | setInput(byte[] input) | Устанавливает входные данные для сжатия. |
void | setInput(byte[] input,
int off,
int len) | Устанавливает входные данные для сжатия. |
void | setInput(ByteBuffer input) | Устанавливает входные данные для сжатия. |
void | setLevel(int level) | Устанавливает уровень сжатия на указанное значение. |
void | setStrategy(int strategy) | Устанавливает стратегию сжатия на указанное значение. |
Методы, объявленные в классе java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Поля
DEFLATED
public static final int DEFLATED
Метод сжатия для алгоритма deflate (в настоящее время поддерживается только он).
- См. также:
- Значения константных полей
NO_COMPRESSION
public static final int NO_COMPRESSION
Уровень сжатия для отсутствия сжатия.
- См. также:
- Значения константных полей
BEST_SPEED
public static final int BEST_SPEED
Уровень сжатия для самого быстрого сжатия.
- См. также:
- Значения константных полей
BEST_COMPRESSION
public static final int BEST_COMPRESSION
Уровень сжатия для наилучшего сжатия.
- См. также:
- Значения константных полей
DEFAULT_COMPRESSION
public static final int DEFAULT_COMPRESSION
Уровень сжатия по умолчанию.
- См. также:
- Значения константных полей
FILTERED
public static final int FILTERED
Стратегия сжатия, наиболее подходящая для данных, состоящих в основном из небольших значений с несколько случайным распределением. Принудительно использует больше кодирования Хаффмана и меньше сопоставления строк.
- См. также:
- Значения константных полей
HUFFMAN_ONLY
public static final int HUFFMAN_ONLY
Стратегия сжатия только для кодирования Хаффмана.
- См. также:
- Значения константных полей
DEFAULT_STRATEGY
public static final int DEFAULT_STRATEGY
Стратегия сжатия по умолчанию.
- См. также:
- Значения константных полей
NO_FLUSH
public static final int NO_FLUSH
Режим сброса сжатия, используемый для достижения наилучшего результата сжатия.
- С:
- 1.7
- См. также:
-
deflate(byte[], int, int, int), Значения константных полей
SYNC_FLUSH
public static final int SYNC_FLUSH
Режим сброса сжатия, используемый для вывода всех ожидаемых данных; может ухудшить сжатие для некоторых алгоритмов сжатия.
- С:
- 1.7
- См. также:
-
deflate(byte[], int, int, int), Значения константных полей
FULL_FLUSH
public static final int FULL_FLUSH
Режим сброса сжатия, используемый для вывода всех ожидаемых данных и сброса сжатия. Слишком частое использование этого режима может серьезно ухудшить сжатие.
- С:
- 1.7
- См. также:
-
deflate(byte[], int, int, int), Значения константных полей
Конструкторы
Deflater
public Deflater(int level,
boolean nowrap) Создаёт новый компрессор, используя указанный уровень сжатия. Если 'nowrap' равно true, то заголовки и контрольные суммы ZLIB не будут использоваться для поддержки формата сжатия, используемого как в GZIP, так и в PKZIP.
- Параметры:
-
level- уровень сжатия (0-9) -
nowrap- если true, то используется совместимое с GZIP сжатие
Deflater
public Deflater(int level)
Создаёт новый компрессор, используя указанный уровень сжатия. Сжатые данные будут генерироваться в формате ZLIB.
- Параметры:
-
level- уровень сжатия (0-9)
Deflater
public Deflater()
Создаёт новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут генерироваться в формате ZLIB.
Методы
setInput
public void setInput(byte[] input,
int off,
int len) Устанавливает входные данные для сжатия.
Один из методов setInput() должен быть вызван всякий раз, когда needsInput() возвращает true, указывая, что требуется больше входных данных.
- Параметры:
-
input- байты входных данных -
off- начальный смещение данных -
len- длина данных - См. также:
needsInput()
setInput
public void setInput(byte[] input)
Устанавливает входные данные для сжатия.
Один из методов setInput() должен быть вызван всякий раз, когда needsInput() возвращает true, указывая, что требуется больше входных данных.
- Параметры:
-
input- байты входных данных - См. также:
needsInput()
setInput
public void setInput(ByteBuffer input)
Устанавливает входные данные для сжатия.
Один из методов setInput() должен быть вызван всякий раз, когда needsInput() возвращает true, указывая, что требуется больше входных данных.
Положение указанного буфера будет смещаться по мере выполнения операций сжатия, до предела буфера. Входной буфер можно изменять (пополнять) между операциями сжатия; это эквивалентно созданию нового буфера и его установке с помощью этого метода.
Изменение содержимого, положения или предела входного буфера одновременно с операцией сжатия приведет к неопределенному поведению, что может включать неверные результаты операции или ее сбой.
- Параметры:
-
input- байты входных данных - С:
- 11
- См. также:
needsInput()
setDictionary
public void setDictionary(byte[] dictionary,
int off,
int len) Устанавливает предопределенный словарь для сжатия. Предопределенный словарь используется, когда буфер истории может быть предопределен. Когда данные позже распаковываются с помощью Inflater.inflate(), можно вызвать Inflater.getAdler() для получения значения Adler-32 словаря, необходимого для распаковки.
- Параметры:
-
dictionary- байты данных словаря -
off- начальный смещение данных -
len- длина данных - См. также:
-
Inflater.inflate(byte[], int, int),Inflater.getAdler()
setDictionary
public void setDictionary(byte[] dictionary)
Устанавливает предопределенный словарь для сжатия. Предопределенный словарь используется, когда буфер истории может быть предопределен. Когда данные позже распаковываются с помощью Inflater.inflate(), можно вызвать Inflater.getAdler() для получения значения Adler-32 словаря, необходимого для распаковки.
- Параметры:
-
dictionary- байты данных словаря - См. также:
-
Inflater.inflate(byte[], int, int),Inflater.getAdler()
setDictionary
public void setDictionary(ByteBuffer dictionary)
Устанавливает предопределенный словарь для сжатия. Предопределенный словарь используется, когда буфер истории может быть предопределен. Когда данные позже распаковываются с помощью Inflater.inflate(), можно вызвать Inflater.getAdler() для получения значения Adler-32 словаря, необходимого для распаковки.
Байты в заданном байтовом буфере будут полностью потреблены этим методом. По возвращении его положение будет равно его пределу.
- Параметры:
-
dictionary- байты данных словаря - См. также:
-
Inflater.inflate(byte[], int, int),Inflater.getAdler()
setStrategy
public void setStrategy(int strategy)
Устанавливает стратегию сжатия до указанного значения.
Если стратегия сжатия изменена, следующий вызов deflate будет сжимать доступные на данный момент входные данные со старой стратегией (и может быть сброшен); новая стратегия вступит в силу только после этого вызова.
- Параметры:
-
strategy- новая стратегия сжатия - Исключения:
-
IllegalArgumentException- если стратегия сжатия неверна
setLevel
public void setLevel(int level)
Устанавливает уровень сжатия до указанного значения.
Если уровень сжатия изменен, следующий вызов deflate будет сжимать доступные на данный момент входные данные со старым уровнем (и может быть сброшен); новый уровень вступит в силу только после этого вызова.
- Параметры:
-
level- новый уровень сжатия (0-9) - Исключения:
-
IllegalArgumentException- если уровень сжатия неверный
needsInput
public boolean needsInput()
Возвращает true, если в буфере входных данных нет данных. Это можно использовать для определения, нужно ли вызвать один из методов setInput(), чтобы предоставить больше входных данных.
- Возвращает:
- true, если буфер входных данных пустой и необходимо вызвать setInput() для предоставления дополнительных данных
finish
public void finish()
При вызове указывает, что сжатие должно завершиться текущим содержимым буфера ввода.
finished
public boolean finished()
Возвращает true, если достигнут конец потока сжатых данных.
- Возвращает:
- true, если достигнут конец потока сжатых данных
deflate
public int deflate(byte[] output,
int off,
int len) Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что следует вызвать needsInput для определения, требуются ли дополнительные входные данные.
Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в форме deflater.deflate(b, off, len) дает тот же результат, что и вызов deflater.deflate(b, off, len, Deflater.NO_FLUSH).
- Параметры:
-
output- буфер для сжатых данных -
off- начальный смещение данных -
len- максимальное количество байтов сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
deflate
public int deflate(byte[] output)
Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что следует вызвать needsInput для определения, требуются ли дополнительные входные данные.
Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в форме deflater.deflate(b) дает тот же результат, что и вызов deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH).
- Параметры:
-
output- буфер для сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
deflate
public int deflate(ByteBuffer output)
Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что следует вызвать needsInput для определения, требуются ли дополнительные входные данные.
Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в форме deflater.deflate(output) дает тот же результат, что и вызов deflater.deflate(output, Deflater.NO_FLUSH).
- Параметры:
-
output- буфер для сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
- С:
- 11
deflate
public int deflate(byte[] output,
int off,
int len,
int flush) Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество сжатых данных.
Режим сброса сжатия — один из следующих трёх режимов:
-
NO_FLUSH: позволяет сжимаемому модулю самостоятельно определить, сколько данных аккумулировать, прежде чем производить вывод, чтобы достичь наилучшего сжатия (должен использоваться в нормальных сценариях). Значение возврата 0 в этом режиме сброса указывает, что следует вызватьneedsInput(), чтобы определить, требуются ли дополнительные входные данные. -
SYNC_FLUSH: все ожидающие данные вывода в сжимаемом модуле сбрасываются в указанный буфер вывода, чтобы сжимаемый модуль, работающий со сжатыми данными, мог получить все доступные на данный момент входные данные (В частности,needsInput()возвращаетtrueпосле этого вызова, если предоставлено достаточно места вывода). Сброс сSYNC_FLUSHможет ухудшить сжатие для некоторых алгоритмов сжатия, и поэтому его следует использовать только при необходимости. -
FULL_FLUSH: все ожидающие данные вывода сбрасываются так же, как сSYNC_FLUSH. Состояние сжатия сбрасывается, чтобы сжимаемый модуль, работающий со сжатыми выходными данными, мог перезапустить процесс с этой точки, если предыдущие сжатые данные повреждены или если желателен произвольный доступ. Частое использованиеFULL_FLUSHможет существенно ухудшить сжатие.
В случае FULL_FLUSH или SYNC_FLUSH, если возвращаемое значение равно len, доступного места в буфере вывода b, этот метод следует вызвать снова с тем же параметром flush и большим пространством вывода. Убедитесь, что len больше 6, чтобы избежать повторного вывода маркера сброса (5 байт) в буфер вывода при каждом вызове этого метода.
Если метод setInput(ByteBuffer) был вызван для предоставления буфера для ввода, положение входного буфера будет смещено на количество байтов, потребленных этой операцией.
- Параметры:
-
output- буфер для сжатых данных -
off- начальный смещение данных -
len- максимальное количество байтов сжатых данных -
flush- режим сброса сжатия - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
- Исключения:
-
IllegalArgumentException- если режим сброса недействителен - С момента:
- 1.7
deflate
public int deflate(ByteBuffer output,
int flush) Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество сжатых байтов.
Режим сброса сжатия может быть одним из следующих трёх режимов:
-
NO_FLUSH: позволяет сжимающему модулю самостоятельно решать, сколько данных накапливать перед выводом, для достижения наилучшего сжатия (должен использоваться в обычных сценариях). Значение возврата 0 в этом режиме сброса указывает на то, что необходимо вызватьneedsInput()для определения необходимости дополнительных входных данных. -
SYNC_FLUSH: все ожидаемые данные в сжимающем модуле сбрасываются в указанный буфер вывода, чтобы сжимающий модуль получил все имеющиеся входные данные (в частности,needsInput()вернётtrueпосле этого вызова, если предоставлено достаточное пространство для вывода). Сброс сSYNC_FLUSHможет ухудшить сжатие для некоторых алгоритмов сжатия, поэтому его следует использовать только при необходимости. -
FULL_FLUSH: все ожидаемые данные сбрасываются, как и в случае сSYNC_FLUSH. Состояние сжатия сбрасывается, чтобы сжимающий модуль мог начать с этого момента, если предыдущие сжатые данные повреждены или требуется произвольный доступ. Частое использованиеFULL_FLUSHможет существенно ухудшить сжатие.
В случае FULL_FLUSH или SYNC_FLUSH, если значение возврата равно оставшемуся пространству в буфере, этот метод должен быть вызван снова с тем же параметром flush и большим пространством для вывода. Убедитесь, что буфер имеет как минимум 6 байт свободного места, чтобы избежать многократного вывода маркера сброса (5 байт) в буфер вывода при каждом вызове этого метода.
При успешном выполнении позиция данного output байтового буфера будет увеличена на количество байтов, произведённых операцией, что равно возвращённому числовому значению.
Если метод setInput(ByteBuffer) был вызван для предоставления буфера для ввода, позиция буфера ввода будет увеличена на количество байтов, потреблённых этой операцией.
- Параметры:
-
output- буфер для сжатых данных -
flush- режим сброса сжатия - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
- Исключения:
-
IllegalArgumentException- если режим сброса недействителен - С момента:
- 11
getAdler
public int getAdler()
Возвращает значение ADLER-32 нескомпрессированных данных.
- Возвращает:
- значение ADLER-32 нескомпрессированных данных
getTotalIn
public int getTotalIn()
Возвращает общее количество нескомпрессированных байтов ввода до сих пор.
Поскольку число байтов может быть больше, чем Integer.MAX_VALUE, метод getBytesRead() является предпочтительным способом получения этой информации.
- Возвращает:
- общее количество нескомпрессированных байтов ввода до сих пор
getBytesRead
public long getBytesRead()
Возвращает общее количество нескомпрессированных байтов ввода до сих пор.
- Возвращает:
- общее (неотрицательное) количество нескомпрессированных байтов ввода до сих пор
- С момента:
- 1.5
getTotalOut
public int getTotalOut()
Возвращает общее количество сжатых байтов вывода до сих пор.
Поскольку число байтов может быть больше, чем Integer.MAX_VALUE, метод getBytesWritten() является предпочтительным способом получения этой информации.
- Возвращает:
- общее количество сжатых байтов вывода до сих пор
getBytesWritten
public long getBytesWritten()
Возвращает общее количество сжатых байтов вывода до сих пор.
- Возвращает:
- общее (неотрицательное) количество сжатых байтов вывода до сих пор
- С момента:
- 1.5
reset
public void reset()
Сбрасывает сжимающий модуль, чтобы можно было обработать новый набор входных данных. Сохраняет текущий уровень и стратегию сжатия.
end
public void end()
Закрывает сжимающий модуль и отбрасывает любые необработанные входные данные. Этот метод должен вызываться, когда сжимающий модуль больше не используется. После вызова этого метода поведение объекта Deflater не определено.
finalize
@Deprecated(since="9",
forRemoval=true)
protected void finalize() finalize устарел и будет удалён. Он реализован как no-op. Подклассы, переопределяющие finalize для выполнения очистки, должны быть изменены на использование альтернативных механизмов очистки и удалить переопределённый метод finalize. Рекомендуемая очистка для сжимающего модуля — явное вызов метода end при завершении использования. Если end не вызван явно, ресурсы сжимающего модуля будут освобождены при отсутствии ссылок на экземпляр.Закрывает сжимающий модуль при сборе мусора.
- Переопределяет:
-
finalizeв классеObject - См. также:
-
WeakReference,PhantomReference
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/zip/Deflater.html