Класс Inflater
- java.lang.Object
-
- java.util.zip.Inflater
public class Inflater extends Object
Этот класс предоставляет поддержку для универсальной декомпрессии с использованием популярной библиотеки сжатия ZLIB. Библиотека сжатия ZLIB была первоначально разработана как часть стандарта графики PNG и не защищена патентами. Она полностью описана в спецификациях в описании пакета java.util.zip.
Этот класс распаковывает последовательности сжатых с помощью ZLIB байтов. Последовательность входных байтов предоставляется либо в массиве байтов, либо в буфере байтов, через один из setInput() методов. Последовательность выходных байтов записывается в выходной массив байтов или буфер байтов, переданный в deflate() методы.
Следующий фрагмент кода демонстрирует тривиальное сжатие и распаковку строки с использованием Deflater и Inflater.
try {
// Encode a String into bytes
String inputString = "blahblahblahâ¬â¬";
byte[] input = inputString.getBytes("UTF-8");
// Compress the bytes
byte[] output = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
// Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(output, 0, compressedDataLength);
byte[] result = new byte[100];
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
} catch (java.io.UnsupportedEncodingException ex) {
// handle
} catch (java.util.zip.DataFormatException ex) {
// handle
}
- Примечание API:
- Для освобождения ресурсов, используемых этим
Inflater, методend()следует вызывать явно. Подклассы несут ответственность за очистку ресурсов, полученных подклассом. Подклассы, которые переопределяютfinalize()для выполнения очистки, должны быть изменены на использование альтернативных механизмов очистки, таких какCleaner, и удалить переопределенныйfinalizeметод. - Требования к реализации:
- Если этот
Inflaterбыл подклассифицирован, и методendбыл переопределен, методendбудет вызван при завершении работы, когда распаковщик недоступен. Но подклассы не должны зависеть от этой конкретной реализации; завершение работы не надёжно, и методfinalizeустарел и будет удалён. - С:
- 1.1
- См. также:
Deflater
Конструкторы
| Конструктор | Описание |
|---|---|
Inflater() | Создаёт новый декомпрессор. |
Inflater(boolean nowrap) | Создаёт новый декомпрессор. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | end() | Закрывает декомпрессор и отбрасывает любые необработанные входные данные. |
protected void | finalize() | Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Метод finalize устарел и будет удалён. |
boolean | finished() | Возвращает true, если достигнут конец потока сжатых данных. |
int | getAdler() | Возвращает значение ADLER-32 распакованных данных. |
long | getBytesRead() | Возвращает общее количество сжатых байтов, введённых до сих пор. |
long | getBytesWritten() | Возвращает общее количество распакованных байтов, выведенных до сих пор. |
int | getRemaining() | Возвращает общее количество байтов, оставшихся в буфере ввода. |
int | getTotalIn() | Возвращает общее количество сжатых байтов, введённых до сих пор. |
int | getTotalOut() | Возвращает общее количество распакованных байтов, выведенных до сих пор. |
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) | Устанавливает входные данные для декомпрессии. |
Методы, объявленные в классе java.lang.Object
clone, equals, 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- длина данных - См. также:
-
needsDictionary(),getAdler()
setDictionary
public void setDictionary(byte[] dictionary)
Устанавливает предопределенный словарь в заданный массив байтов. Должен вызываться, когда inflate() возвращает 0, а needsDictionary() возвращает true, указывая на необходимость предопределенного словаря. Метод getAdler() можно использовать для получения значения Adler-32 необходимого словаря.
- Параметры:
-
dictionary- байты данных словаря - См. также:
-
needsDictionary(),getAdler()
setDictionary
public void setDictionary(ByteBuffer dictionary)
Устанавливает предопределенный словарь в байты заданного буфера. Должен вызываться, когда inflate() возвращает 0, а needsDictionary() возвращает true, указывая на необходимость предопределенного словаря. Метод getAdler() можно использовать для получения значения Adler-32 необходимого словаря.
Байты в заданном буфере будут полностью использованы этим методом. По завершении, его позиция будет равна его пределу.
- Параметры:
-
dictionary- байты данных словаря - С:
- 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- если формат сжатых данных некорректен - См. также:
-
needsInput(),needsDictionary()
inflate
public int inflate(byte[] output)
throws DataFormatException Распаковывает байты в указанный буфер. Возвращает фактическое количество распакованных байтов. Значение 0 указывает на то, что необходимо вызвать needsInput() или needsDictionary() для определения необходимости дополнительных входных данных или предопределенного словаря. В последнем случае getAdler() можно использовать для получения значения Adler-32 требуемого словаря.
Количество оставшихся байтов будет уменьшено на количество потребленных байтов входных данных. Если был вызван метод setInput(ByteBuffer) для предоставления буфера входных данных, позиция входного буфера будет сдвинута на количество потребленных байтов.
Эти значения количества байтов, а также значения общего количества прочитанных байтов и общего количества записанных байтов будут обновлены даже в случае возникновения исключения DataFormatException, чтобы отразить количество данных, потребленных и произведенных до возникновения исключения.
- Параметры:
-
output- буфер для распакованных данных - Возвращает:
- фактическое количество распакованных байтов
- Исключения:
-
DataFormatException- если формат сжатых данных некорректен - См. также:
-
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- если заданный буфер вывода только для чтения - С:
- 11
- См. также:
-
needsInput(),needsDictionary()
getAdler
public int getAdler()
Возвращает значение ADLER-32 распакованных данных.
- Возвращает:
- значение ADLER-32 распакованных данных
getTotalIn
public int getTotalIn()
Возвращает общее количество сжатых байтов, введенных до сих пор.
Поскольку количество байтов может быть больше Integer.MAX_VALUE, метод getBytesRead() теперь является предпочтительным способом получения этой информации.
- Возвращает:
- общее количество сжатых байтов, введенных до сих пор
getBytesRead
public long getBytesRead()
Возвращает общее количество сжатых байтов, введенных до сих пор.
- Возвращает:
- общее (неотрицательное) количество сжатых байтов, введенных до сих пор
- С:
- 1.5
getTotalOut
public int getTotalOut()
Возвращает общее количество распакованных байтов, выведенных до сих пор.
Поскольку количество байтов может быть больше Integer.MAX_VALUE, метод getBytesWritten() теперь предпочтительнее для получения этой информации.
- Возвращает:
- общее количество распакованных байтов, выведенных до сих пор
getBytesWritten
public long getBytesWritten()
Возвращает общее количество распакованных байтов, выведенных до сих пор.
- Возвращает:
- общее (неотрицательное) количество распакованных байтов, выведенных до сих пор
- С:
- 1.5
reset
public void reset()
Сбрасывает декомпрессор, чтобы можно было обработать новый набор входных данных.
end
public void end()
Закрывает декомпрессор и отбрасывает любые необработанные входные данные. Этот метод следует вызывать, когда декомпрессор больше не используется. После вызова этого метода поведение объекта Inflater неопределено.
finalize
@Deprecated(since="9",
forRemoval=true)
protected void finalize() finalize устарел и будет удален. Он реализован как no-op. Подклассы, которые переопределяют finalize для выполнения очистки, должны быть изменены на использование альтернативных механизмов очистки и удалить переопределённый метод finalize. Рекомендуемая очистка для компрессора — это явное вызов метода end при его выходе из использования. Если метод end не вызывается явно, ресурсы компрессора будут освобождены, когда экземпляр станет недоступным.Закрывает декомпрессор при сборе мусора.
- Переопределяет:
-
finalizeв классеObject - Требования к реализации:
- Если этот
Inflaterбыл подклассифицирован и методendбыл переопределён, то методendбудет вызван, когда декомпрессор станет недоступным. - См. также:
-
WeakReference,PhantomReference
© 1993, 2020, 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/11/docs/api/java.base/java/util/zip/Inflater.html