Spec-Zone.ru › OpenJDK 21

Класс Deflater

java.lang.Object
java.util.zip.Deflater
public class Deflater 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);
     compresser.end();

     // 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:
Для освобождения ресурсов, используемых этим Deflater, метод end() должен быть вызван явно. Подклассы отвечают за очистку ресурсов, полученных подклассом. Подклассы, переопределяющие Object.finalize() для выполнения очистки, должны быть изменены для использования альтернативных механизмов очистки, таких как Cleaner, и удалить переопределенный метод finalize.
С:
1.1
См. также:
  • Inflater

Краткое описание полей

Модификатор и тип Поле Описание
static final int BEST_COMPRESSION
Уровень сжатия для наилучшего сжатия.
static final int BEST_SPEED
Уровень сжатия для самого быстрого сжатия.
static final int DEFAULT_COMPRESSION
Уровень сжатия по умолчанию.
static final int DEFAULT_STRATEGY
Стратегия сжатия по умолчанию.
static final int DEFLATED
Метод сжатия для алгоритма deflate (единственный поддерживаемый в настоящее время).
static final int FILTERED
Стратегия сжатия, наилучшим образом используемая для данных, состоящих в основном из малых значений с некоторой случайной распределенностью.
static final int FULL_FLUSH
Режим сброса сжатия, используемый для сброса всех ожидаемых выходных данных и сброса сжимателя.
static final int HUFFMAN_ONLY
Стратегия сжатия только для кодирования Хаффмана.
static final int NO_COMPRESSION
Уровень сжатия для отсутствия сжатия.
static final int NO_FLUSH
Режим сброса сжатия, используемый для достижения наилучшего результата сжатия.
static final int SYNC_FLUSH
Режим сброса сжатия, используемый для сброса всех ожидаемых выходных данных; может ухудшить сжатие для некоторых алгоритмов сжатия.

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

Конструктор Описание
Deflater()
Создает новый сжиматель с уровнем сжатия по умолчанию.
Deflater(int level)
Создает новый сжиматель с использованием указанного уровня сжатия.
Deflater(int level, boolean nowrap)
Создает новый сжиматель с использованием указанного уровня сжатия.

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

Модификатор и тип Метод Описание
int deflate(byte[] output)
Сжимает входные данные и заполняет указанный буфер сжатыми данными.
int deflate(byte[] output, int off, int len)
Сжимает входные данные и заполняет указанный буфер сжатыми данными.
int deflate(byte[] output, int off, int len, int flush)
Сжимает входные данные и заполняет указанный буфер сжатыми данными.
int deflate(ByteBuffer output)
Сжимает входные данные и заполняет указанный буфер сжатыми данными.
int deflate(ByteBuffer output, int flush)
Сжимает входные данные и заполняет указанный буфер сжатыми данными.
void end()
Закрывает сжиматель и отбрасывает все необработанные входные данные.
void finish()
При вызове указывает, что сжатие должно завершиться текущим содержимым входного буфера.
boolean finished()
Возвращает true, если достигнут конец выходного потока сжатых данных.
int getAdler()
Возвращает значение ADLER-32 несжатых данных.
long getBytesRead()
Возвращает общее количество несжатых байтов, введенных до сих пор.
long getBytesWritten()
Возвращает общее количество сжатых байтов, выведенных до сих пор.
int getTotalIn()
Возвращает общее количество несжатых байтов, введенных до сих пор.
int getTotalOut()
Возвращает общее количество сжатых байтов, выведенных до сих пор.
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)
Устанавливает входные данные для сжатия.
void setLevel(int level)
Устанавливает уровень сжатия на указанное значение.
void setStrategy(int strategy)
Устанавливает стратегию сжатия на указанное значение.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание полей

DEFLATED

public static final int DEFLATED
Метод сжатия для алгоритма deflate (единственный поддерживаемый в настоящее время).
См. также:
  • Значения константного поля

NO_COMPRESSION

public static final int NO_COMPRESSION
Уровень сжатия для отсутствия сжатия.
См. также:
  • Значения константного поля

BEST_SPEED

public static final int BEST_SPEED
Уровень сжатия для самого быстрого сжатия.
См. также:
  • Значения константного поля

BEST_COMPRESSION

public static final int BEST_COMPRESSION
Уровень сжатия для наилучшего сжатия.
См. также:
  • Значения константного поля

DEFAULT_COMPRESSION

public static final int DEFAULT_COMPRESSION
Уровень сжатия по умолчанию.
См. также:
  • Значения константного поля

FILTERED

public static final int FILTERED
Стратегия сжатия, наилучшим образом используемая для данных, состоящих в основном из небольших значений с несколько случайным распределением. Принудительно используется больше кодирования Хаффмана и меньше сопоставления строк.
См. также:
  • Значения константного поля

HUFFMAN_ONLY

public static final int HUFFMAN_ONLY
Стратегия сжатия только с кодированием Хаффмана.
См. также:
  • Значения константного поля

DEFAULT_STRATEGY

public static final int DEFAULT_STRATEGY
Стратегия сжатия по умолчанию.
См. также:
  • Значения константного поля

NO_FLUSH

public static final int NO_FLUSH
Режим сброса сжатия, используемый для достижения наилучшего результата сжатия.
С момента:
1.7
См. также:
  • deflate(byte[], int, int, int)
  • Значения константного поля

SYNC_FLUSH

public static final int SYNC_FLUSH
Режим сброса сжатия, используемый для вывода всех ожидаемых результатов; может ухудшить сжатие для некоторых алгоритмов сжатия.
С момента:
1.7
См. также:
  • deflate(byte[], int, int, int)
  • Значения константного поля

FULL_FLUSH

public static final int FULL_FLUSH
Режим сброса сжатия, используемый для вывода всех ожидаемых результатов и сброса сжатия. Чрезмерное использование этого режима может серьезно ухудшить сжатие.
С момента:
1.7
См. также:
  • deflate(byte[], int, int, int)
  • Значения константного поля

Подробное описание конструкторов

Deflater

public Deflater(int level, boolean nowrap)
Создает новый компрессор, используя указанный уровень сжатия. Если 'nowrap' имеет значение true, то заголовки и поля контрольной суммы ZLIB не будут использоваться, чтобы поддерживать формат сжатия, используемый как в GZIP, так и в PKZIP.
Параметры:
level - уровень сжатия (0-9)
nowrap - если true, то использовать совместимое с GZIP сжатие

Deflater

public Deflater(int level)
Создает новый компрессор, используя указанный уровень сжатия. Сжатые данные будут генерироваться в формате ZLIB.
Параметры:
level - уровень сжатия (0-9)

Deflater

public Deflater()
Создает новый компрессор с уровнем сжатия по умолчанию. Сжатые данные будут генерироваться в формате ZLIB.

Подробное описание методов

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, указывая, что требуются дополнительные входные данные.

Позиция заданного буфера будет перемещаться по мере выполнения операций сжатия deflate, до границы буфера. Входной буфер может быть изменён (пополнен) между операциями сжатия; это эквивалентно созданию нового буфера и установке его с помощью этого метода.

Изменение содержимого, позиции или границы входного буфера во время выполнения операции deflate приведёт к неопределённому поведению, которое может включать неправильные результаты работы или сбои в работе.

Параметры:
input - байты входных данных
С момента:
11
См. также:
  • needsInput()

setDictionary

public void setDictionary(byte[] dictionary, int off, int len)
Устанавливает предварительно заданный словарь для сжатия. Предварительно заданный словарь используется, когда буфер истории может быть предопределён. Когда данные позже распаковываются с помощью Inflater.inflate(), Inflater.getAdler() можно вызвать для получения значения Adler-32 словаря, необходимого для распаковки.
Параметры:
dictionary - байты данных словаря
off - начальное смещение данных
len - длина данных
См. также:
  • Inflater.inflate(byte[], int, int)
  • Inflater.getAdler()

setDictionary

public void setDictionary(byte[] dictionary)
Устанавливает предварительно заданный словарь для сжатия. Предварительно заданный словарь используется, когда буфер истории может быть предопределён. Когда данные позже распаковываются с помощью Inflater.inflate(), Inflater.getAdler() можно вызвать для получения значения Adler-32 словаря, необходимого для распаковки.
Параметры:
dictionary - байты данных словаря
См. также:
  • Inflater.inflate(byte[], int, int)
  • Inflater.getAdler()

setDictionary

public void setDictionary(ByteBuffer dictionary)
Устанавливает предварительно заданный словарь для сжатия. Предварительно заданный словарь используется, когда буфер истории может быть предопределён. Когда данные позже распаковываются с помощью Inflater.inflate(), Inflater.getAdler() можно вызвать для получения значения Adler-32 словаря, необходимого для распаковки.

Байты в данном буфере байтов будут полностью использованы этим методом. По завершении, его позиция будет равна его пределу.

Параметры:
dictionary - байты данных словаря
См. также:
  • Inflater.inflate(byte[], int, int)
  • Inflater.getAdler()

setStrategy

public void setStrategy(int strategy)
Устанавливает стратегию сжатия до указанного значения.

Если стратегия сжатия изменяется, следующий вызов deflate будет сжимать доступные входные данные до сих пор со старой стратегией (и может быть сброшен); новая стратегия вступит в силу только после этого вызова.

Параметры:
strategy - новая стратегия сжатия
Исключения:
IllegalArgumentException - если стратегия сжатия недействительна

setLevel

public void setLevel(int level)
Устанавливает уровень сжатия до указанного значения.

Если уровень сжатия изменён, следующее вызов deflate будет сжимать доступный на данный момент ввод с использованием старого уровня (и, возможно, будет выполнен сброс); новый уровень будет действовать только после этого вызова.

Parameters:
level - новый уровень сжатия (0-9)
Throws:
IllegalArgumentException - если уровень сжатия некорректен

needsInput

public boolean needsInput()
Возвращает true, если в буфере ввода нет данных. Это можно использовать, чтобы определить, нужно ли вызвать один из setInput() методов, чтобы предоставить дополнительный ввод.
Returns:
true, если буфер данных ввода пустой и нужно вызвать setInput(), чтобы предоставить дополнительный ввод

finish

public void finish()
При вызове указывает, что сжатие должно завершиться текущим содержимым буфера ввода.

finished

public boolean finished()
Возвращает true, если достигнут конец выходного потока сжатых данных.
Returns:
true, если достигнут конец выходного потока сжатых данных

deflate

public int deflate(byte[] output, int off, int len)
Сжимает данные ввода и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что следует вызвать needsInput, чтобы определить, требуется ли дополнительный ввод данных.

Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в форме deflater.deflate(b, off, len) даёт тот же результат, что и вызов deflater.deflate(b, off, len, Deflater.NO_FLUSH).

Parameters:
output - буфер для сжатых данных
off - начальный смещение данных
len - максимальное количество байтов сжатых данных
Returns:
фактическое количество байтов сжатых данных, записанных в буфер вывода

deflate

public int deflate(byte[] output)
Сжимает данные ввода и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что следует вызвать needsInput, чтобы определить, требуется ли дополнительный ввод данных.

Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в форме deflater.deflate(b) даёт тот же результат, что и вызов deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH).

Parameters:
output - буфер для сжатых данных
Returns:
фактическое количество байтов сжатых данных, записанных в буфер вывода

deflate

public int deflate(ByteBuffer output)
Сжимает данные ввода и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что следует вызвать needsInput, чтобы определить, требуется ли дополнительный ввод данных.

Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в форме deflater.deflate(output) даёт тот же результат, что и вызов deflater.deflate(output, Deflater.NO_FLUSH).

Parameters:
output - буфер для сжатых данных
Returns:
фактическое количество байтов сжатых данных, записанных в буфер вывода
Throws:
ReadOnlyBufferException - если предоставленный буфер вывода только для чтения
Since:
11

deflate

public int deflate(byte[] output, int off, int len, int flush)
Сжимает данные ввода и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество сжатых байтов.

Режим сброса сжатия — один из следующих трёх режимов:

  • NO_FLUSH: позволяет дефлатору решить, сколько данных накопить перед выводом, чтобы достичь наилучшего сжатия (должен использоваться в стандартных сценариях). Значение 0 в этом режиме сброса указывает, что следует вызвать needsInput(), чтобы определить, требуется ли дополнительный ввод данных.
  • SYNC_FLUSH: все ожидающие данные вывода в дефлаторе сбрасываются в указанный буфер вывода, чтобы декомпрессор, работающий со сжатыми данными, мог получить все доступные на данный момент данные ввода (в частности, needsInput() возвращает true после этого вызова, если предоставлено достаточно места в буфере). Сброс с SYNC_FLUSH может ухудшить сжатие для некоторых алгоритмов сжатия, поэтому его следует использовать только при необходимости.
  • FULL_FLUSH: все ожидающие данные сбрасываются, как и при SYNC_FLUSH. Состояние сжатия сбрасывается, чтобы декомпрессор, обрабатывающий сжатые выходные данные, мог перезапуститься с этой точки, если предыдущие сжатые данные были повреждены или требуется произвольный доступ. Использование FULL_FLUSH слишком часто может серьёзно ухудшить сжатие.

В случае FULL_FLUSH или SYNC_FLUSH, если возвращаемое значение равно len, доступного места в буфере вывода b, этот метод следует вызвать снова с тем же параметром flush и большим объёмом места в буфере. Убедитесь, что len больше 6, чтобы избежать многократного вывода маркера сброса (5 байт) в буфер вывода каждый раз при вызове этого метода.

Если метод setInput(ByteBuffer) был вызван для предоставления буфера для ввода, позиция буфера ввода будет продвинута на количество байтов, потреблённых этим операцией.

Parameters:
output - буфер для сжатых данных
off - начальный смещение данных
len - максимальное количество байтов сжатых данных
flush - режим сброса сжатия
Returns:
фактическое количество байтов сжатых данных, записанных в буфер вывода
Throws:
IllegalArgumentException - если режим сброса некорректен
Since:
1.7

deflate

public int deflate(ByteBuffer output, int flush)
Сжимает данные ввода и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество сжатых байтов.

Режим сброса сжатия — один из следующих трёх режимов:

  • NO_FLUSH: позволяет дефлатору решить, сколько данных накопить перед выводом, чтобы достичь наилучшего сжатия (должен использоваться в стандартных сценариях). Значение 0 в этом режиме сброса указывает, что следует вызвать needsInput(), чтобы определить, требуется ли дополнительный ввод данных.
  • SYNC_FLUSH: все ожидающие данные вывода в дефлаторе сбрасываются в указанный буфер вывода, чтобы декомпрессор, работающий со сжатыми данными, мог получить все доступные на данный момент данные ввода (в частности, needsInput() возвращает true после этого вызова, если предоставлено достаточно места в буфере). Сброс с SYNC_FLUSH может ухудшить сжатие для некоторых алгоритмов сжатия, поэтому его следует использовать только при необходимости.
  • FULL_FLUSH: все ожидающие данные сбрасываются, как и при SYNC_FLUSH. Состояние сжатия сбрасывается, чтобы декомпрессор, обрабатывающий сжатые выходные данные, мог перезапуститься с этой точки, если предыдущие сжатые данные были повреждены или требуется произвольный доступ. Использование FULL_FLUSH слишком часто может серьёзно ухудшить сжатие.

В случае FULL_FLUSH или SYNC_FLUSH, если возвращаемое значение равно оставшемуся месту буфера, этот метод следует вызвать снова с тем же параметром flush и большим объёмом места в буфере. Убедитесь, что буфер имеет по крайней мере 6 байт свободного места, чтобы избежать многократного вывода маркера сброса (5 байт) в буфер вывода каждый раз при вызове этого метода.

При успехе позиция данного output байтового буфера будет продвинута на количество байт, произведённых операцией, что равно возвращаемому значению этого метода.

Если метод setInput(ByteBuffer) был вызван для предоставления буфера для ввода, позиция буфера ввода будет продвинута на количество байтов, потреблённых этой операцией.

Parameters:
output - буфер для сжатых данных
flush - режим сброса сжатия
Returns:
фактическое количество байтов сжатых данных, записанных в буфер вывода
Throws:
IllegalArgumentException - если режим сброса некорректен
ReadOnlyBufferException - если предоставленный буфер вывода только для чтения
Since:
11

getAdler

public int getAdler()
Возвращает значение ADLER-32 нескомпрессированных данных.
Returns:
значение ADLER-32 нескомпрессированных данных

getTotalIn

public int getTotalIn()
Возвращает общее количество нескомпрессированных байтов, введённых до сих пор.

Так как количество байтов может быть больше Integer.MAX_VALUE, метод getBytesRead() теперь предпочтительнее для получения этой информации.

Returns:
общее количество нескомпрессированных байтов, введённых до сих пор

getBytesRead

public long getBytesRead()
Возвращает общее количество нескомпрессированных байтов, введённых до сих пор.
Returns:
общее (неотрицательное) количество нескомпрессированных байтов, введённых до сих пор
Since:
1.5
END_OF_DOCUMENT_MARKER

getTotalOut

public int getTotalOut()
Возвращает общее количество сжатых байтов, выведенных до настоящего момента.

Поскольку количество байтов может быть больше, чем Integer.MAX_VALUE, метод getBytesWritten() теперь является предпочтительным способом получения этой информации.

Возвращает:
общее количество сжатых байтов, выведенных до настоящего момента

getBytesWritten

public long getBytesWritten()
Возвращает общее количество сжатых байтов, выведенных до настоящего момента.
Возвращает:
общее (неотрицательное) количество сжатых байтов, выведенных до настоящего момента
Since:
1.5

reset

public void reset()
Сбрасывает deflater, чтобы можно было обработать новый набор входных данных. Сохраняет текущие настройки уровня сжатия и стратегии.

end

public void end()
Закрывает компрессор и отбрасывает любые необработанные входные данные. Этот метод должен вызываться, когда компрессор больше не используется. После вызова этого метода поведение объекта Deflater не определено.

© 1993, 2023, 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/21/docs/api/java.base/java/util/zip/Deflater.html

Spec-Zone.ru

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