Класс 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()
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Метод 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

Spec-Zone .ru
спецификации, руководства, описания, API