Класс Inflater
- Все реализуемые интерфейсы:
AutoCloseable
public class Inflater extends Object implements AutoCloseable
Если не указано иное, передача аргумента 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Inflater() |
Создаёт новый распаковщик. |
Inflater |
Создаёт новый распаковщик. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает и освобождает ресурсы, удерживаемые этим объектом Inflater, и отбрасывает все необработанные входные данные. |
void |
end() |
Закрывает и освобождает ресурсы, удерживаемые этим объектом Inflater, и отбрасывает все необработанные входные данные. |
boolean |
finished() |
Возвращает true, если достигнут конец потока сжатых данных. |
int |
getAdler() |
Возвращает значение ADLER-32 несжатых данных. |
long |
getBytesRead() |
Возвращает общее количество байтов сжатых данных, полученных на данный момент. |
long |
getBytesWritten() |
Возвращает общее количество байтов несжатых данных, выданных на данный момент. |
int |
getRemaining() |
Возвращает общее количество байтов, оставшихся во входном буфере. |
int |
getTotalIn() |
Устарел. |
int |
getTotalOut() |
Устарел. Вместо него используйте getBytesWritten() |
int |
inflate |
Распаковывает байты в указанный буфер. |
int |
inflate |
Распаковывает байты в указанный буфер. |
int |
inflate |
Распаковывает байты в указанный буфер. |
boolean |
needsDictionary() |
Возвращает true, если для распаковки требуется предустановленный словарь. |
boolean |
needsInput() |
Возвращает true, если во входном буфере не осталось данных. |
void |
reset() |
Сбрасывает состояние распаковщика, чтобы можно было обработать новый набор входных данных. |
void |
setDictionary |
Задаёт предустановленный словарь, представленный указанным массивом байтов. |
void |
setDictionary |
Задаёт предустановленный словарь, представленный указанным массивом байтов. |
void |
setDictionary |
Задаёт предустановленный словарь, представленный байтами указанного буфера. |
void |
setInput |
Задаёт входные данные для распаковки. |
void |
setInput |
Задаёт входные данные для распаковки. |
void |
setInput |
Задаёт входные данные для распаковки. |
Подробное описание конструкторов
Inflater
public Inflater(boolean nowrap)
Примечание. При использовании параметра 'nowrap' необходимо также предоставить в качестве входных данных дополнительный фиктивный байт. Он требуется собственной библиотеке ZLIB для поддержки определённых оптимизаций.
- Параметры:
-
nowrap— если true, обеспечивается поддержка сжатия, совместимого с GZIP
Inflater
public Inflater()
Подробное описание методов
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, указывая на необходимость дополнительных входных данных.
Позиция указанного буфера будет увеличиваться по мере выполнения операций распаковки, вплоть до предельного значения буфера. Входной буфер можно изменять (заполнять заново) между операциями распаковки; это эквивалентно созданию нового буфера и его передаче этому методу.
Одновременное изменение содержимого, позиции или предельного значения входного буфера во время операции распаковки приводит к неопределённому поведению, включая некорректные результаты операции или её сбой.
- Параметры:
-
input— байты входных данных - Начиная с:
- 11
- См. также:
setDictionary
public void setDictionary(byte[] dictionary, int off, int len)
- Параметры:
-
dictionary— байты данных словаря -
off— начальное смещение данных -
len— длина данных - Выбрасывает:
-
IllegalStateException— если Inflater закрыт - См. также:
setDictionary
public void setDictionary(byte[] dictionary)
- Параметры:
-
dictionary— байты данных словаря - Выбрасывает:
-
IllegalStateException— если Inflater закрыт - См. также:
setDictionary
public void setDictionary(ByteBuffer dictionary)
Этот метод полностью считывает байты из указанного байтового буфера. По завершении позиция буфера будет равна его предельному значению.
- Параметры:
-
dictionary— байты данных словаря - Выбрасывает:
-
IllegalStateException— если Inflater закрыт - Начиная с:
- 11
- См. также:
getRemaining
public int getRemaining()
- Возвращает:
- общее количество байтов, оставшихся во входном буфере
needsInput
public boolean needsInput()
setInput() для предоставления дополнительных входных данных.- Возвращает:
- true, если во входном буфере не осталось данных
needsDictionary
public boolean needsDictionary()
- Возвращает:
- true, если для распаковки требуется предустановленный словарь
- См. также:
finished
public boolean finished()
- Возвращает:
- true, если достигнут конец потока сжатых данных
inflate
public int inflate(byte[] output, int off, int len) throws DataFormatException
Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество байтов, использованных этой операцией, даже если будет выброшено исключение DataFormatException.
Количество оставшихся байтов будет уменьшено на количество использованных входных байтов. Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество использованных байтов.
Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов будут обновлены даже в случае выбрасывания исключения DataFormatException, чтобы отразить объём данных, использованных и сформированных до возникновения исключения.
- Параметры:
-
output— буфер для несжатых данных -
off— начальное смещение данных -
len— максимальное количество несжатых байтов - Возвращает:
- фактическое количество несжатых байтов
- Выбрасывает:
-
DataFormatException— если формат сжатых данных недопустим -
IllegalStateException— если Inflater закрыт - См. также:
inflate
public int inflate(byte[] output) throws DataFormatException
Количество оставшихся байтов будет уменьшено на количество использованных входных байтов. Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество использованных байтов.
Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов будут обновлены даже в случае выбрасывания исключения DataFormatException, чтобы отразить объём данных, использованных и сформированных до возникновения исключения.
- Параметры:
-
output— буфер для несжатых данных - Возвращает:
- фактическое количество несжатых байтов
- Выбрасывает:
-
DataFormatException— если формат сжатых данных недопустим -
IllegalStateException— если Inflater закрыт - См. также:
inflate
public int inflate(ByteBuffer output) throws DataFormatException
При успешном выполнении позиция указанного байтового буфера output будет увеличена на количество байтов, созданных операцией; это значение равно числу, возвращаемому данным методом. Обратите внимание, что позиция буфера output будет увеличена даже в случае выбрасывания исключения DataFormatException.
Количество оставшихся байтов будет уменьшено на количество использованных входных байтов. Если для передачи входных данных был вызван метод setInput(ByteBuffer), позиция входного буфера будет увеличена на количество использованных байтов.
Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов будут обновлены даже в случае выбрасывания исключения DataFormatException, чтобы отразить объём данных, использованных и сформированных до возникновения исключения.
- Параметры:
-
output— буфер для несжатых данных - Возвращает:
- фактическое количество несжатых байтов
- Выбрасывает:
-
DataFormatException— если формат сжатых данных недопустим -
ReadOnlyBufferException— если указанный выходной буфер доступен только для чтения -
IllegalStateException— если Inflater закрыт - Начиная с:
- 11
- См. также:
getAdler
public int getAdler()
- Возвращает:
- значение 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
public void close()
Inflater, и отбрасывает все необработанные входные данные.- Определено в:
-
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/zip/Inflater.html
getBytesRead()