Класс Deflater
- Все реализуемые интерфейсы:
AutoCloseable
public class Deflater extends Object implements AutoCloseable
Если не указано иное, передача аргумента null методу этого класса приведёт к выбрасыванию NullPointerException.
Этот класс преобразует последовательности байтов в сжатые данные формата ZLIB. Входная последовательность байтов передаётся либо в массиве байтов, либо в ByteBuffer посредством одного из методов setInput(). Выходная последовательность байтов записывается в выходной массив байтов или ByteBuffer, переданный методам deflate().
Чтобы освободить ресурсы, используемые Deflater, приложение должно закрыть его, вызвав метод end() или close().
- Примечание к API:
- Этот класс реализует
AutoCloseable, чтобы упростить его использование в оператореtry-with-resources. Метод close() просто вызываетend().Следующий фрагмент кода демонстрирует простое сжатие и распаковку строки с помощью
DeflaterиInflater.// Encode a String into bytes String inputString = "blahblahblah\u20AC\u20AC"; byte[] input = inputString.getBytes(StandardCharsets.UTF_8); // Compress the bytes ByteArrayOutputStream compressedBaos = new ByteArrayOutputStream(); try (Deflater compressor = new Deflater()) { compressor.setInput(input); // Let the compressor know that the complete input // has been made available compressor.finish(); // Keep compressing the input till the compressor // is finished compressing while (!compressor.finished()) { // Use some reasonable size for the temporary buffer // based on the data being compressed byte[] tmpBuffer = new byte[100]; int numCompressed = compressor.deflate(tmpBuffer); // Copy over the compressed bytes from the temporary // buffer into the final byte array compressedBaos.write(tmpBuffer, 0, numCompressed); } } // Decompress the bytes ByteArrayOutputStream decompressedBaos = new ByteArrayOutputStream(); try (Inflater decompressor = new Inflater()) { byte[] compressed = compressedBaos.toByteArray(); decompressor.setInput(compressed, 0, compressed.length); while (!decompressor.finished()) { // Use some reasonable size for the temporary buffer, // based on the data being decompressed; in this example, // we use a small buffer size byte[] tmpBuffer = new byte[100]; int numDecompressed = 0; try { numDecompressed = decompressor.inflate(tmpBuffer); } catch (DataFormatException dfe) { // Handle the exception suitably, in this example // we just rethrow it throw new RuntimeException(dfe); } // Copy over the decompressed bytes from the temporary // buffer into the final byte array decompressedBaos.write(tmpBuffer, 0, numDecompressed); } } // Decode the bytes into a String String outputString = decompressedBaos.toString(StandardCharsets.UTF_8); - С версии:
- 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 |
Создаёт новый компрессор с указанным уровнем сжатия. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает этот Deflater, освобождает удерживаемые им ресурсы и отбрасывает все необработанные входные данные. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate |
Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
void |
end() |
Закрывает этот Deflater, освобождает удерживаемые им ресурсы и отбрасывает все необработанные входные данные. |
void |
finish() |
При вызове указывает, что сжатие следует завершить, используя текущее содержимое входного буфера. |
boolean |
finished() |
Возвращает true, если достигнут конец потока выходных сжатых данных. |
int |
getAdler() |
Возвращает значение ADLER-32 несжатых данных. |
long |
getBytesRead() |
Возвращает общее количество байтов несжатых данных, полученных на данный момент. |
long |
getBytesWritten() |
Возвращает общее количество байтов сжатых данных, выведенных на данный момент. |
int |
getTotalIn() |
Устарело. |
int |
getTotalOut() |
Устарело. Вместо этого используйте getBytesWritten() |
boolean |
needsInput() |
Возвращает true, если во входном буфере не осталось данных. |
void |
reset() |
Сбрасывает дефлятор, чтобы можно было обработать новый набор входных данных. |
void |
setDictionary |
Устанавливает предустановленный словарь для сжатия. |
void |
setDictionary |
Устанавливает предустановленный словарь для сжатия. |
void |
setDictionary |
Устанавливает предустановленный словарь для сжатия. |
void |
setInput |
Устанавливает входные данные для сжатия. |
void |
setInput |
Устанавливает входные данные для сжатия. |
void |
setInput |
Устанавливает входные данные для сжатия. |
void |
setLevel |
Устанавливает уровень сжатия в указанное значение. |
void |
setStrategy |
Устанавливает стратегию сжатия в указанное значение. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения указанного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения указанного промежутка реального времени. |
Подробное описание полей
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 входной буфер можно изменять (повторно заполнять); это эквивалентно созданию нового буфера и его передаче этому методу.
Одновременное изменение содержимого, позиции или предела входного буфера во время операции deflate приводит к неопределенному поведению, которое может включать неверные результаты операции или ее сбой.
- Параметры:
-
input— байты входных данных - С версии:
- 11
- См. также:
setDictionary
public void setDictionary(byte[] dictionary, int off, int len)
- Параметры:
-
dictionary— байты данных словаря -
off— начальное смещение данных -
len— длина данных - Исключения:
-
IllegalStateException— если Deflater закрыт - См. также:
setDictionary
public void setDictionary(byte[] dictionary)
- Параметры:
-
dictionary— байты данных словаря - Исключения:
-
IllegalStateException— если Deflater закрыт - См. также:
setDictionary
public void setDictionary(ByteBuffer dictionary)
Этот метод полностью считывает байты из переданного байтового буфера. После возврата позиция буфера будет равна его пределу.
- Параметры:
-
dictionary— байты данных словаря - Исключения:
-
IllegalStateException— если Deflater закрыт - С версии:
- 11
- См. также:
setStrategy
public void setStrategy(int strategy)
Если стратегия сжатия изменена, при следующем вызове deflate доступные на данный момент входные данные будут сжаты с использованием прежней стратегии (и, возможно, будут сброшены); новая стратегия вступит в силу только после этого вызова.
- Параметры:
-
strategy— новая стратегия сжатия - Исключения:
-
IllegalArgumentException— если стратегия сжатия недопустима
setLevel
public void setLevel(int level)
Если уровень сжатия изменен, при следующем вызове deflate доступные на данный момент входные данные будут сжаты с использованием прежнего уровня (и, возможно, будут сброшены); новый уровень вступит в силу только после этого вызова.
- Параметры:
-
level— новый уровень сжатия (0–9) - Исключения:
-
IllegalArgumentException— если уровень сжатия недопустим
needsInput
public boolean needsInput()
setInput() для передачи дополнительных входных данных.- Возвращает:
- true, если буфер входных данных пуст и для передачи дополнительных данных следует вызвать setInput()
finish
public void finish()
finished
public boolean finished()
- Возвращает:
- 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).
- Параметры:
-
output— буфер для сжатых данных -
off— начальное смещение данных -
len— максимальное количество байтов сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в выходной буфер
- Исключения:
-
IllegalStateException— если Deflater закрыт
deflate
public int deflate(byte[] output)
needsInput, чтобы определить, требуются ли дополнительные входные данные. Этот метод использует NO_FLUSH в качестве режима сброса при сжатии. Вызов этого метода в форме deflater.deflate(b) дает тот же результат, что и вызов deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH).
- Параметры:
-
output— буфер для сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в выходной буфер
- Исключения:
-
IllegalStateException— если Deflater закрыт
deflate
public int deflate(ByteBuffer output)
needsInput, чтобы определить, требуются ли дополнительные входные данные. Этот метод использует NO_FLUSH в качестве режима сброса при сжатии. Вызов этого метода в форме deflater.deflate(output) дает тот же результат, что и вызов deflater.deflate(output, Deflater.NO_FLUSH).
- Параметры:
-
output— буфер для сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в выходной буфер
- Исключения:
-
ReadOnlyBufferException— если переданный выходной буфер доступен только для чтения -
IllegalStateException— если Deflater закрыт - С версии:
- 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— если режим сброса недопустим -
IllegalStateException— если Deflater закрыт - С версии:
- 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— если режим сброса недопустим -
ReadOnlyBufferException— если переданный выходной буфер доступен только для чтения -
IllegalStateException— если Deflater закрыт - С версии:
- 11
getAdler
public int getAdler()
- Возвращает:
- значение ADLER-32 для несжатых данных
- Исключения:
-
IllegalStateException— если Deflater закрыт
getTotalIn
@Deprecated(since="23") public int getTotalIn()
getBytesRead()- Требования к реализации:
- Этот метод возвращает значение, эквивалентное
(int) getBytesRead(), и поэтому не может вернуть правильное значение, если оно большеInteger.MAX_VALUE. - Возвращает:
- общее количество байтов несжатых данных, полученных на данный момент
- Исключения:
-
IllegalStateException— если Deflater закрыт
getBytesRead
public long getBytesRead()
- Возвращает:
- общее (неотрицательное) количество байтов несжатых данных, полученных на данный момент
- Исключения:
-
IllegalStateException— если Deflater закрыт - С версии:
- 1.5
getTotalOut
@Deprecated(since="23") public int getTotalOut()
getBytesWritten()- Требования к реализации:
- Этот метод возвращает значение, эквивалентное
(int) getBytesWritten(), и поэтому не может вернуть правильное значение, если оно большеInteger.MAX_VALUE. - Возвращает:
- общее количество байтов сжатых данных, выведенных на данный момент
- Исключения:
-
IllegalStateException— если Deflater закрыт
getBytesWritten
public long getBytesWritten()
- Возвращает:
- общее (неотрицательное) количество байтов сжатых данных, выведенных на данный момент
- Исключения:
-
IllegalStateException— если Deflater закрыт - С версии:
- 1.5
reset
public void reset()
- Исключения:
-
IllegalStateException— если Deflater закрыт
end
public void end()
Deflater, освобождает занятые им ресурсы и отбрасывает все необработанные входные данные. Если Deflater уже закрыт, вызов этого метода не оказывает никакого эффекта.
- Требования к реализации:
- Подклассам следует переопределить этот метод для освобождения ресурсов, выделенных подклассом.
- См. также:
close
public void close()
Deflater, освобождает занятые им ресурсы и отбрасывает все необработанные входные данные.- Определено в:
-
closeв интерфейсеAutoCloseable - Требования к реализации:
- Этот метод вызывает метод
end(). - С версии:
- 25
© 1993, 2025, 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.
getBytesRead()