Класс Deflater
public class Deflater extends Object
Этот класс сжимает последовательности байтов в сжатый формат данных 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()должен быть вызван явно. Подклассы отвечают за очистку ресурсов, полученных подклассом. Подклассы, переопределяющиеObject.finalize()для выполнения очистки, должны быть изменены, чтобы использовать альтернативные механизмы очистки, такие какCleaner, и удалить переопределённыйfinalizeметод. - С:
- 1.1
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
BEST_COMPRESSION |
Уровень сжатия для наилучшего сжатия. |
static final int |
BEST_SPEED |
Уровень сжатия для самого быстрого сжатия. |
static final int |
DEFAULT_COMPRESSION |
Уровень сжатия по умолчанию. |
static final int |
DEFAULT_STRATEGY |
Стратегия сжатия по умолчанию. |
static final int |
DEFLATED |
Метод сжатия для алгоритма deflate (в настоящее время поддерживается только один). |
static final int |
FILTERED |
Стратегия сжатия, наилучшим образом используемая для данных, состоящих в основном из малых значений с несколько случайным распределением. |
static final int |
FULL_FLUSH |
Режим сжатия flush, используемый для сброса всех ожидаемых выходных данных и сброса сжимателя. |
static final int |
HUFFMAN_ONLY |
Стратегия сжатия только для кодирования Хаффмана. |
static final int |
NO_COMPRESSION |
Уровень сжатия для отсутствия сжатия. |
static final int |
NO_FLUSH |
Режим сжатия flush, используемый для достижения наилучшего результата сжатия. |
static final int |
SYNC_FLUSH |
Режим сжатия flush, используемый для сброса всех ожидаемых выходных данных; может ухудшить сжатие для некоторых алгоритмов сжатия. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Deflater() |
Создаёт новый сжиматель с уровнем сжатия по умолчанию. |
Deflater |
Создаёт новый сжиматель с использованием указанного уровня сжатия. |
Deflater |
Создаёт новый сжиматель с использованием указанного уровня сжатия. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
void |
end() |
Закрывает сжиматель и отбрасывает любые необработанные входные данные. |
void |
finish() |
При вызове указывает, что сжатие должно завершиться текущим содержимым буфера ввода. |
boolean |
finished() |
Возвращает true, если достигнут конец выходного потока сжатых данных. |
int |
getAdler() |
Возвращает значение ADLER-32 несжатых данных. |
long |
getBytesRead() |
Возвращает общее количество несжатых байтов, введённых до сих пор. |
long |
getBytesWritten() |
Возвращает общее количество сжатых байтов, выведенных до сих пор. |
int |
getTotalIn() |
Возвращает общее количество несжатых байтов, введённых до сих пор. |
int |
getTotalOut() |
Возвращает общее количество сжатых байтов, выведенных до сих пор. |
boolean |
needsInput() |
Возвращает true, если в буфере ввода нет данных. |
void |
reset() |
Сбрасывает сжиматель, чтобы можно было обработать новый набор входных данных. |
void |
setDictionary |
Устанавливает предопределённый словарь для сжатия. |
void |
setDictionary |
Устанавливает предопределённый словарь для сжатия. |
void |
setDictionary |
Устанавливает предопределённый словарь для сжатия. |
void |
setInput |
Устанавливает входные данные для сжатия. |
void |
setInput |
Устанавливает входные данные для сжатия. |
void |
setInput |
Устанавливает входные данные для сжатия. |
void |
setLevel |
Устанавливает уровень сжатия на указанное значение. |
void |
setStrategy |
Устанавливает стратегию сжатия на указанное значение. |
Подробное описание полей
DEFLATED
public static final int DEFLATED
- См. также:
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
- См. также:
SYNC_FLUSH
public static final int SYNC_FLUSH
- С момента:
- 1.7
- См. также:
FULL_FLUSH
public static final int FULL_FLUSH
- С момента:
- 1.7
- См. также:
Подробное описание конструкторов
Deflater
public Deflater(int level, boolean nowrap)
- Параметры:
-
level- уровень сжатия (0-9) -
nowrap- если true, то используется совместимое с GZIP сжатие
Deflater
public Deflater(int level)
- Параметры:
-
level- уровень сжатия (0-9)
Deflater
public Deflater()
Подробное описание методов
setInput
public void setInput(byte[] input, int off, int len)
Один из методов setInput() должен вызываться всякий раз, когда needsInput() возвращает true, указывающее на то, что требуется больше входных данных.
- Параметры:
-
input- байты входных данных -
off- начальный смещение данных -
len- длина данных - См. также:
setInput
public void setInput(byte[] input)
Один из методов setInput() должен вызываться всякий раз, когда needsInput() возвращает true, указывающее на то, что требуется больше входных данных.
- Параметры:
-
input- байты входных данных - См. также:
setInput
public void setInput(ByteBuffer input)
Один из методов setInput() должен вызываться всякий раз, когда needsInput() возвращает true, указывающее на то, что требуется больше входных данных.
Позиция заданного буфера будет перемещена по мере выполнения операций сжатия deflate, до предела буфера. Входной буфер можно изменять (пополнять) между операциями сжатия; это эквивалентно созданию нового буфера и его установке с помощью этого метода.
Изменение содержимого, позиции или предела входного буфера одновременно с операцией сжатия deflate приведёт к неопределённому поведению, что может включать неправильные результаты операции или сбой операции.
- Параметры:
-
input- байты входных данных - С момента:
- 11
- См. также:
setDictionary
public void setDictionary(byte[] dictionary, int off, int len)
- Параметры:
-
dictionary- байты данных словаря -
off- начальный смещение данных -
len- длина данных - См. также:
setDictionary
public void setDictionary(byte[] dictionary)
- Параметры:
-
dictionary- байты данных словаря - См. также:
setDictionary
public void setDictionary(ByteBuffer dictionary)
Байты в заданном буфере будут полностью использованы этим методом. По возвращении его позиция будет равна его пределу.
- Параметры:
-
dictionary- байты данных словаря - См. также:
setStrategy
public void setStrategy(int strategy)
Если стратегия сжатия изменена, следующий вызов deflate будет сжимать доступный на данный момент входной поток со старой стратегией (и, возможно, сброшен); новая стратегия вступит в силу только после этого вызова.
- Parameters:
-
strategy- новая стратегия сжатия - Throws:
-
IllegalArgumentException- если стратегия сжатия неверна
setLevel
public void setLevel(int level)
Если уровень сжатия изменён, следующий вызов deflate будет сжимать доступный на данный момент входной поток со старым уровнем (и, возможно, сброшен); новый уровень вступит в силу только после этого вызова.
- Parameters:
-
level- новый уровень сжатия (0-9) - Throws:
-
IllegalArgumentException- если уровень сжатия неверный
needsInput
public boolean needsInput()
setInput() методов для предоставления дополнительного ввода.- Returns:
- true, если буфер данных ввода пуст, и следует вызвать setInput() для предоставления дополнительного ввода
finish
public void finish()
finished
public boolean finished()
- Returns:
- true, если достигнут конец потока сжатых данных
deflate
public int deflate(byte[] output, int off, int len)
needsInput для определения, требуется ли дополнительный входной данные. Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в виде deflater.deflate(b, off, len) даёт тот же результат, что и вызов deflater.deflate(b, off, len, Deflater.NO_FLUSH).
- Parameters:
-
output- буфер для сжатых данных -
off- начальный смещение данных -
len- максимальное количество байт сжатых данных - Returns:
- фактическое количество байт сжатых данных, записанных в буфер вывода
deflate
public int deflate(byte[] output)
needsInput для определения, требуется ли дополнительный входной данные. Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в виде deflater.deflate(b) даёт тот же результат, что и вызов deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH).
- Parameters:
-
output- буфер для сжатых данных - Returns:
- фактическое количество байт сжатых данных, записанных в буфер вывода
deflate
public int deflate(ByteBuffer output)
needsInput следует вызвать, чтобы определить, требуется ли дополнительный входной данные. Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в виде deflater.deflate(output) даёт тот же результат, что и вызов deflater.deflate(output, Deflater.NO_FLUSH).
- Parameters:
-
output- буфер для сжатых данных - Returns:
- фактическое количество байт сжатых данных, записанных в буфер вывода
- Since:
- 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) был вызван для предоставления буфера ввода, позиция буфера ввода будет смещена на количество байт, потреблённых этим операцией.
- Parameters:
-
output- буфер для сжатых данных -
off- начальный смещение данных -
len- максимальное количество байт сжатых данных -
flush- режим сброса сжатия - Returns:
- фактическое количество байт сжатых данных, записанных в буфер вывода
- Throws:
-
IllegalArgumentException- если режим сброса неверен - Since:
- 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) был вызван для предоставления буфера ввода, позиция буфера ввода будет смещена на количество байт, потреблённых этой операцией.
- Parameters:
-
output- буфер для сжатых данных -
flush- режим сброса сжатия - Returns:
- фактическое количество байт сжатых данных, записанных в буфер вывода
- Throws:
-
IllegalArgumentException- если режим сброса неверен - Since:
- 11
getAdler
public int getAdler()
- Returns:
- значение 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()
© 1993, 2021, 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/17/docs/api/java.base/java/util/zip/Deflater.html