Spec-Zone.ru › OpenJDK 27

Класс Inflater

java.lang.Object
java.util.zip.Inflater
Все реализуемые интерфейсы:
AutoCloseable
public class Inflater extends Object implements AutoCloseable
Этот класс предоставляет поддержку универсальной распаковки с использованием популярной библиотеки сжатия ZLIB. Библиотека сжатия ZLIB изначально была разработана в рамках графического стандарта PNG и не защищена патентами. Она подробно описана в спецификациях в описании пакета java.util.zip.

Если не указано иное, передача аргумента null конструктору или методу этого класса приведёт к выбрасыванию NullPointerException.

Этот класс распаковывает последовательности байтов, сжатые с помощью ZLIB. Входная последовательность байтов передаётся либо в массиве байтов, либо в ByteBuffer с помощью одного из методов setInput(). Выходная последовательность байтов записывается в выходной массив байтов или ByteBuffer, переданный методам inflate().

Чтобы освободить ресурсы, используемые объектом Inflater, приложение должно закрыть его, вызвав метод 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
См. также:
  • Deflater

Краткое описание конструкторов

Конструктор Описание
Inflater()
Создаёт новый объект для распаковки.
Inflater(boolean nowrap)
Создаёт новый объект для распаковки.

Краткое описание методов

Модификатор и тип Метод Описание
void close()
Закрывает этот Inflater, освобождает удерживаемые им ресурсы и отбрасывает все необработанные входные данные.
void end()
Закрывает этот Inflater, освобождает удерживаемые им ресурсы и отбрасывает все необработанные входные данные.
boolean finished()
Возвращает true, если достигнут конец сжатого потока данных.
int getAdler()
Возвращает значение ADLER-32 для распакованных данных.
long getBytesRead()
Возвращает общее количество байтов сжатых данных, полученных на данный момент.
long getBytesWritten()
Возвращает общее количество байтов распакованных данных, выведенных на данный момент.
int getRemaining()
Возвращает общее количество байтов, оставшихся во входном буфере.
int getTotalIn()
Устарело.
Вместо этого используйте getBytesRead()
int getTotalOut()
Устарело.
Вместо этого используйте getBytesWritten()
int inflate(byte[] output)
Распаковывает байты в указанный буфер.
int inflate(byte[] output, int off, int len)
Распаковывает байты в указанный буфер.
int inflate(ByteBuffer output)
Распаковывает байты в указанный буфер.
boolean needsDictionary()
Возвращает true, если для распаковки требуется предустановленный словарь.
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)
Устанавливает входные данные для распаковки.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени.

Подробное описание конструкторов

Inflater

public Inflater(boolean nowrap)
Создаёт новый объект для распаковки. Если параметр 'nowrap' имеет значение true, заголовок ZLIB и поля контрольной суммы не используются. Это обеспечивает совместимость с форматом сжатия, используемым как GZIP, так и PKZIP.

Примечание. При использовании параметра 'nowrap' необходимо также передать в качестве входных данных дополнительный фиктивный байт. Он требуется нативной библиотеке ZLIB для поддержки определённых оптимизаций.

Параметры:
nowrap — если true, поддерживается сжатие, совместимое с GZIP

Inflater

public Inflater()
Создаёт новый объект для распаковки.

Подробное описание методов

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)
Устанавливает предустановленный словарь, заданный массивом байтов. Этот метод следует вызывать, когда inflate() возвращает 0, а needsDictionary() возвращает true, указывая на необходимость предустановленного словаря. Метод getAdler() можно использовать для получения значения Adler-32 необходимого словаря.
Параметры:
dictionary — байты данных словаря
off — начальное смещение данных
len — длина данных
Выбрасывает:
IllegalStateException — если Inflater закрыт
См. также:
  • needsDictionary()
  • getAdler()

setDictionary

public void setDictionary(byte[] dictionary)
Устанавливает предустановленный словарь, заданный массивом байтов. Этот метод следует вызывать, когда inflate() возвращает 0, а needsDictionary() возвращает true, указывая на необходимость предустановленного словаря. Метод getAdler() можно использовать для получения значения Adler-32 необходимого словаря.
Параметры:
dictionary — байты данных словаря
Выбрасывает:
IllegalStateException — если Inflater закрыт
См. также:
  • needsDictionary()
  • getAdler()

setDictionary

public void setDictionary(ByteBuffer dictionary)
Устанавливает предустановленный словарь из байтов указанного буфера. Этот метод следует вызывать, когда inflate() возвращает 0, а needsDictionary() возвращает true, указывая на необходимость предустановленного словаря. Метод getAdler() можно использовать для получения значения Adler-32 необходимого словаря.

Метод полностью использует байты указанного буфера байтов. После завершения его позиция будет равна предельному значению.

Параметры:
dictionary — байты данных словаря
Выбрасывает:
IllegalStateException — если Inflater закрыт
Начиная с версии:
11
См. также:
  • needsDictionary()
  • getAdler()

getRemaining

public int getRemaining()
Возвращает общее количество байтов, оставшихся во входном буфере. Это позволяет определить, какие байты остались во входном буфере после завершения распаковки.
Возвращает:
общее количество байтов, оставшихся во входном буфере

needsInput

public boolean needsInput()
Возвращает true, если во входном буфере не осталось данных. Это позволяет определить, следует ли вызвать один из методов setInput(), чтобы предоставить дополнительные входные данные.
Возвращает:
true, если во входном буфере не осталось данных

needsDictionary

public boolean needsDictionary()
Возвращает true, если для распаковки требуется предустановленный словарь.
Возвращает:
true, если для распаковки требуется предустановленный словарь
См. также:
  • setDictionary(byte[], int, int)

finished

public boolean finished()
Возвращает true, если достигнут конец сжатого потока данных.
Возвращает:
true, если достигнут конец сжатого потока данных

inflate

public int inflate(byte[] output, int off, int len) throws DataFormatException
Распаковывает байты в указанный буфер. Возвращает фактическое количество распакованных байтов. Возвращаемое значение 0 указывает, что следует вызвать needsInput() или needsDictionary(), чтобы определить, требуются ли дополнительные входные данные или предустановленный словарь. В последнем случае getAdler() можно использовать для получения значения Adler-32 необходимого словаря.

Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество байтов, использованных этой операцией, даже если будет выброшено исключение DataFormatException.

Количество оставшихся байтов будет уменьшено на количество использованных входных байтов. Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество использованных байтов.

Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов обновляются даже в случае выбрасывания исключения DataFormatException, чтобы отражать количество данных, использованных и выведенных до возникновения исключения.

Параметры:
output — буфер для распакованных данных
off — начальное смещение данных
len — максимальное количество распакованных байтов
Возвращает:
фактическое количество распакованных байтов
Выбрасывает:
DataFormatException — если формат сжатых данных недопустим
IllegalStateException — если Inflater закрыт
См. также:
  • needsInput()
  • needsDictionary()

inflate

public int inflate(byte[] output) throws DataFormatException
Распаковывает байты в указанный буфер. Возвращает фактическое количество распакованных байтов. Возвращаемое значение 0 указывает, что следует вызвать needsInput() или needsDictionary(), чтобы определить, требуются ли дополнительные входные данные или предустановленный словарь. В последнем случае getAdler() можно использовать для получения значения Adler-32 необходимого словаря.

Количество оставшихся байтов будет уменьшено на количество использованных входных байтов. Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество использованных байтов.

Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов обновляются даже в случае выбрасывания исключения DataFormatException, чтобы отражать количество данных, использованных и выведенных до возникновения исключения.

Параметры:
output — буфер для распакованных данных
Возвращает:
фактическое количество распакованных байтов
Выбрасывает:
DataFormatException — если формат сжатых данных недопустим
IllegalStateException — если Inflater закрыт
См. также:
  • needsInput()
  • needsDictionary()

inflate

public int inflate(ByteBuffer output) throws DataFormatException
Распаковывает байты в указанный буфер. Возвращает фактическое количество распакованных байтов. Возвращаемое значение 0 указывает, что следует вызвать needsInput() или needsDictionary(), чтобы определить, требуются ли дополнительные входные данные или предустановленный словарь. В последнем случае getAdler() можно использовать для получения значения Adler-32 необходимого словаря.

В случае успеха позиция указанного буфера байтов output будет увеличена на количество байтов, полученных в результате операции, которое равно значению, возвращаемому этим методом. Обратите внимание, что позиция буфера output будет увеличена даже в случае выбрасывания исключения DataFormatException.

Количество оставшихся байтов будет уменьшено на количество использованных входных байтов. Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество использованных байтов.

Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов обновляются даже в случае выбрасывания исключения DataFormatException, чтобы отражать количество данных, использованных и выведенных до возникновения исключения.

Параметры:
output — буфер для распакованных данных
Возвращает:
фактическое количество распакованных байтов
Выбрасывает:
DataFormatException — если формат сжатых данных недопустим
ReadOnlyBufferException — если указанный выходной буфер доступен только для чтения
IllegalStateException — если Inflater закрыт
Начиная с версии:
11
См. также:
  • needsInput()
  • needsDictionary()

getAdler

public int getAdler()
Возвращает значение ADLER-32 для распакованных данных.
Возвращает:
значение ADLER-32 для распакованных данных
Выбрасывает:
IllegalStateException — если Inflater закрыт

getTotalIn

@Deprecated(since="23") public int getTotalIn()
Устарело.
Вместо этого используйте getBytesRead()
Возвращает общее количество байтов сжатых данных, полученных на данный момент.
Требования к реализации:
Этот метод возвращает эквивалент (int) getBytesRead() и поэтому не может вернуть правильное значение, если оно превышает Integer.MAX_VALUE.
Возвращает:
общее количество байтов сжатых данных, полученных на данный момент
Выбрасывает:
IllegalStateException — если Inflater закрыт

getBytesRead

public long getBytesRead()
Возвращает общее количество байтов сжатых данных, полученных на данный момент.
Возвращает:
общее (неотрицательное) количество байтов сжатых данных, полученных на данный момент
Выбрасывает:
IllegalStateException — если Inflater закрыт
Начиная с версии:
1.5

getTotalOut

@Deprecated(since="23") public int getTotalOut()
Устарело.
Вместо этого используйте getBytesWritten()
Возвращает общее количество байтов распакованных данных, выведенных на данный момент.
Требования к реализации:
Этот метод возвращает эквивалент (int) getBytesWritten() и поэтому не может вернуть правильное значение, если оно превышает Integer.MAX_VALUE.
Возвращает:
общее количество байтов распакованных данных, выведенных на данный момент
Выбрасывает:
IllegalStateException — если Inflater закрыт

getBytesWritten

public long getBytesWritten()
Возвращает общее количество байтов распакованных данных, выведенных на данный момент.
Возвращает:
общее (неотрицательное) количество байтов распакованных данных, выведенных на данный момент
Выбрасывает:
IllegalStateException — если Inflater закрыт
Начиная с версии:
1.5

reset

public void reset()
Сбрасывает состояние распаковщика, чтобы можно было обработать новый набор входных данных.
Выбрасывает:
IllegalStateException — если Inflater закрыт

end

public void end()
Закрывает Inflater, освобождает удерживаемые им ресурсы и отбрасывает все необработанные входные данные.

Если Inflater уже закрыт, вызов этого метода не оказывает никакого эффекта.

Требования к реализации:
Подклассы должны переопределять этот метод для очистки ресурсов, полученных подклассом.
См. также:
  • close()

close

public void close()
Закрывает Inflater, освобождает удерживаемые им ресурсы и отбрасывает все необработанные входные данные.
Определено в:
close в интерфейсе AutoCloseable
Требования к реализации:
Этот метод вызывает метод end().
Начиная с версии:
25

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API