Spec-Zone.ru › OpenJDK 24

Класс Inflater

java.lang.Object
java.util.zip.Inflater
public class Inflater extends Object
Этот класс предоставляет поддержку для декомпрессии общего назначения с использованием популярной библиотеки сжатия ZLIB. Библиотека сжатия ZLIB была первоначально разработана как часть стандарта графики PNG и не защищена патентами. Она полностью описана в спецификациях в описании пакета java.util.zip.

Если не указано иное, передача 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
См. также:
  • Deflater

Краткое описание конструкторов

Конструктор Описание
Inflater()
Создаёт новый декомпрессор.
Inflater(boolean nowrap)
Создаёт новый декомпрессор.

Краткое описание методов

Модификатор и тип Метод Описание
void end()
Закрывает декомпрессор и отбрасывает все необработанные данные.
boolean finished()
Возвращает true, если достигнут конец потока сжатых данных.
int getAdler()
Возвращает значение ADLER-32 распакованных данных.
long getBytesRead()
Возвращает общее количество сжатых байтов, переданных на вход.
long getBytesWritten()
Возвращает общее количество распакованных байтов, полученных на выходе.
int getRemaining()
Возвращает общее количество байтов, оставшихся в буфере ввода.
int getTotalIn()
Устарело.
Используйте getBytesRead() вместо этого
int getTotalOut()
Устарело.
Используйте getBytesWritten() вместо этого
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, finalize, 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 для отражения количества данных, потребленных и произведённых до возникновения исключения.

Parameters:
output - буфер для распакованных данных
Returns:
фактическое количество распакованных байтов
Throws:
DataFormatException - если формат сжатых данных неверный
ReadOnlyBufferException - если заданный выходной буфер является только для чтения
Since:
11
See Also:
  • needsInput()
  • needsDictionary()

getAdler

public int getAdler()
Возвращает значение ADLER-32 распакованных данных.
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()
Закрывает распаковщик и отбрасывает любые необработанные входные данные. Этот метод должен вызываться, когда распаковщик больше не используется. После вызова этого метода поведение объекта Inflater не определено.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API