Класс 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 |
Режим сброса сжатия, используемый для сброса всех ожидаемых выходных данных и сброса сжимателя. |
static final int |
HUFFMAN_ONLY |
Стратегия сжатия только для кодирования Хаффмана. |
static final int |
NO_COMPRESSION |
Уровень сжатия для отсутствия сжатия. |
static final int |
NO_FLUSH |
Режим сброса сжатия, используемый для достижения наилучшего результата сжатия. |
static final int |
SYNC_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 будет сжимать доступные входные данные до сих пор со старой стратегией (и может быть сброшен); новая стратегия вступит в силу только после этого вызова.
- Параметры:
-
strategy- новая стратегия сжатия - Исключения:
-
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:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
- Throws:
-
ReadOnlyBufferException- если предоставленный буфер вывода только для чтения - 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- если режим сброса некорректен -
ReadOnlyBufferException- если предоставленный буфер вывода только для чтения - Since:
- 11
getAdler
public int getAdler()
- Returns:
- значение ADLER-32 нескомпрессированных данных
getTotalIn
public int getTotalIn()
Так как количество байтов может быть больше Integer.MAX_VALUE, метод getBytesRead() теперь предпочтительнее для получения этой информации.
- Returns:
- общее количество нескомпрессированных байтов, введённых до сих пор
getBytesRead
public long getBytesRead()
- Returns:
- общее (неотрицательное) количество нескомпрессированных байтов, введённых до сих пор
- Since:
- 1.5
getTotalOut
public int getTotalOut()
Поскольку количество байтов может быть больше, чем Integer.MAX_VALUE, метод getBytesWritten() теперь является предпочтительным способом получения этой информации.
- Возвращает:
- общее количество сжатых байтов, выведенных до настоящего момента
getBytesWritten
public long getBytesWritten()
- Возвращает:
- общее (неотрицательное) количество сжатых байтов, выведенных до настоящего момента
- Since:
- 1.5
reset
public void reset()
end
public void end()
© 1993, 2023, 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/21/docs/api/java.base/java/util/zip/Deflater.html