Класс Inflater
public class Inflater extends Object
Если не указано иное, передача null аргумента конструктору или методу в этом классе вызовет исключение NullPointerException.
Этот класс распаковывает последовательности сжатых байтов ZLIB. Последовательность входных байтов предоставляется в виде массива байтов или буфера байтов через один из методов setInput(). Последовательность выходных байтов записывается в массив выходных байтов или буфер байтов, переданные методам inflate().
Следующий фрагмент кода демонстрирует тривиальное сжатие и распаковку строки с использованием 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();
Deflater compressor = new Deflater();
try {
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);
}
} finally {
// Release the resources held by the compressor
compressor.end();
}
// Decompress the bytes
Inflater decompressor = new Inflater();
ByteArrayOutputStream decompressedBaos = new ByteArrayOutputStream();
try {
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);
}
} finally {
// Release the resources held by the decompressor
decompressor.end();
}
// Decode the bytes into a String
String outputString = decompressedBaos.toString(StandardCharsets.UTF_8);
- Примечание API:
- Для освобождения ресурсов, используемых этим
Inflater, необходимо явно вызвать методend(). Подклассы отвечают за очистку ресурсов, полученных подклассом. Подклассы, переопределяющиеObject.finalize()для выполнения очистки, должны быть изменены для использования альтернативных механизмов очистки, таких какCleaner, и убрать переопределённый методfinalize. - С:
- 1.1
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Inflater() |
Создаёт новый декомпрессор. |
Inflater |
Создаёт новый декомпрессор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
end() |
Закрывает декомпрессор и отбрасывает все необработанные данные. |
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- длина данных - См. также:
setDictionary
public void setDictionary(byte[] dictionary)
- Параметры:
-
dictionary- байты данных словаря - См. также:
setDictionary
public void setDictionary(ByteBuffer dictionary)
Байты в заданном буфере будут полностью использованы этим методом. По возвращении его позиция будет равна его пределу.
- Параметры:
-
dictionary- байты данных словаря - С:
- 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- если формат сжатых данных неверен - См. также:
inflate
public int inflate(byte[] output) throws DataFormatException
Количество оставшихся байтов будет уменьшено на количество потребленных входных байтов. Если метод setInput(ByteBuffer) был вызван для предоставления буфера входных данных, позиция входного буфера будет смещена на количество потребленных байтов.
Эти значения байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов, будут обновлены даже в случае возникновения исключения DataFormatException, чтобы отразить количество данных, потребленных и произведенных до возникновения исключения.
- Параметры:
-
output- буфер для распакованных данных - Возвращает:
- фактическое количество распакованных байтов
- Исключения:
-
DataFormatException- если формат сжатых данных неверен - См. также:
inflate
public int inflate(ByteBuffer output) throws DataFormatException
При успешном выполнении, позиция заданного output байтового буфера будет продвинута на столько байтов, сколько было произведено операцией, что равно числу, возвращаемому этим методом. Обратите внимание, что позиция output буфера будет продвинута даже в случае возникновения DataFormatException.
Количество оставшихся байтов (оставшееся количество байтов) будет уменьшено на количество потребленных входных байтов. Если метод setInput(ByteBuffer) был вызван для предоставления буфера для ввода, позиция входного буфера будет продвинута на количество потребленных байтов.
Эти значения байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов будут обновлены даже в случае возникновения DataFormatException для отражения количества данных, потребленных и произведённых до возникновения исключения.
- Parameters:
-
output- буфер для распакованных данных - Returns:
- фактическое количество распакованных байтов
- Throws:
-
DataFormatException- если формат сжатых данных неверный -
ReadOnlyBufferException- если заданный выходной буфер является только для чтения - Since:
- 11
- See Also:
getAdler
public int getAdler()
- Returns:
- значение ADLER-32 распакованных данных
getTotalIn
@Deprecated(since="23") public int getTotalIn()
getBytesRead() вместо этого- Implementation Requirements:
- Этот метод возвращает эквивалент
(int) getBytesRead()и поэтому не может вернуть правильное значение, когда оно большеInteger.MAX_VALUE. - Returns:
- общее количество сжатых входных байтов
getBytesRead
public long getBytesRead()
- Returns:
- общее (неотрицательное) количество сжатых входных байтов
- Since:
- 1.5
getTotalOut
@Deprecated(since="23") public int getTotalOut()
getBytesWritten() вместо этого- Implementation Requirements:
- Этот метод возвращает эквивалент
(int) getBytesWritten()и поэтому не может вернуть правильное значение, когда оно большеInteger.MAX_VALUE. - Returns:
- общее количество распакованных выходных байтов
getBytesWritten
public long getBytesWritten()
- Returns:
- общее (неотрицательное) количество распакованных выходных байтов
- Since:
- 1.5
reset
public void reset()
end
public void end()
© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/zip/Inflater.html
getBytesRead()вместо этого