Spec-Zone.ru › OpenJDK 25

Класс 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

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

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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/zip/Inflater.html

Spec-Zone.ru

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