Spec-Zone.ru › OpenJDK 17

Класс 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
Режим сжатия flush, используемый для сброса всех ожидаемых выходных данных и сброса сжимателя.
static final int HUFFMAN_ONLY
Стратегия сжатия только для кодирования Хаффмана.
static final int NO_COMPRESSION
Уровень сжатия для отсутствия сжатия.
static final int NO_FLUSH
Режим сжатия flush, используемый для достижения наилучшего результата сжатия.
static final int SYNC_FLUSH
Режим сжатия 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 будет сжимать доступный на данный момент входной поток со старой стратегией (и, возможно, сброшен); новая стратегия вступит в силу только после этого вызова.

Parameters:
strategy - новая стратегия сжатия
Throws:
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:
фактическое количество байт сжатых данных, записанных в буфер вывода
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 - если режим сброса неверен
Since:
11

getAdler

public int getAdler()
Возвращает значение ADLER-32 несжатых данных.
Returns:
значение 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()
Сбрасывает deflater, чтобы можно было обработать новый набор входных данных. Сохраняет текущие настройки уровня сжатия и стратегии.

end

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

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

Spec-Zone.ru

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