Класс 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 |
Устанавливает входные данные для распаковки. |
Методы, объявленные в классе 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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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.
getBytesRead()