Класс Deflater
- java.lang.Object
-
- java.util.zip.Deflater
public class Deflater extends Object
Этот класс предоставляет поддержку сжатия общего назначения с использованием популярной библиотеки сжатия ZLIB. Библиотека сжатия ZLIB была первоначально разработана как часть стандарта графики PNG и не защищена патентами. Она полностью описана в спецификациях в разделе описания пакета java.util.zip.
Следующий фрагмент кода демонстрирует тривиальное сжатие и распаковку строки с использованием 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
}
- См. также:
Inflater
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static int |
BEST_COMPRESSION Уровень сжатия для наилучшего сжатия. |
static int |
BEST_SPEED Уровень сжатия для самого быстрого сжатия. |
static int |
DEFAULT_COMPRESSION Уровень сжатия по умолчанию. |
static int |
DEFAULT_STRATEGY Стратегия сжатия по умолчанию. |
static int |
DEFLATED Метод сжатия для алгоритма deflate (единственный в настоящее время поддерживаемый). |
static int |
FILTERED Стратегия сжатия, наилучшая для данных, состоящих в основном из небольших значений с некоторой случайной распределенностью. |
static int |
FULL_FLUSH Режим сброса сжатия, используемый для вывода всех ожидающих выходных данных и сброса deflater. |
static int |
HUFFMAN_ONLY Стратегия сжатия только для кодирования Хаффмана. |
static int |
NO_COMPRESSION Уровень сжатия для отсутствия сжатия. |
static int |
NO_FLUSH Режим сброса сжатия, используемый для достижения наилучшего результата сжатия. |
static int |
SYNC_FLUSH Режим сброса сжатия, используемый для вывода всех ожидающих выходных данных; может ухудшить сжатие для некоторых алгоритмов сжатия. |
Конструкторы
| Конструктор и описание |
|---|
Deflater() Создаёт новый компрессор с уровнем сжатия по умолчанию. |
Deflater(int level) Создаёт новый компрессор с использованием заданного уровня сжатия. |
Deflater(int level,
boolean nowrap) Создаёт новый компрессор с использованием заданного уровня сжатия. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
int |
deflate(byte[] b) Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate(byte[] b,
int off,
int len) Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
int |
deflate(byte[] b,
int off,
int len,
int flush) Сжимает входные данные и заполняет указанный буфер сжатыми данными. |
void |
end() Закрывает компрессор и отбрасывает все необработанные входные данные. |
protected void |
finalize() Закрывает компрессор при сборе мусора. |
void |
finish() При вызове указывает, что сжатие должно завершиться текущим содержимым буфера ввода. |
boolean |
finished() Возвращает true, если достигнут конец выходного потока сжатых данных. |
int |
getAdler() Возвращает значение ADLER-32 несжатых данных. |
long |
getBytesRead() Возвращает общее количество несжатых байтов ввода до сих пор. |
long |
getBytesWritten() Возвращает общее количество сжатых байтов вывода до сих пор. |
int |
getTotalIn() Возвращает общее количество несжатых байтов ввода до сих пор. |
int |
getTotalOut() Возвращает общее количество сжатых байтов вывода до сих пор. |
boolean |
needsInput() Возвращает true, если буфер входных данных пуст и необходимо вызвать setInput(), чтобы предоставить больше входных данных. |
void |
reset() Сбрасывает deflater, чтобы можно было обработать новый набор входных данных. |
void |
setDictionary(byte[] b) Устанавливает предопределённый словарь для сжатия. |
void |
setDictionary(byte[] b,
int off,
int len) Устанавливает предопределённый словарь для сжатия. |
void |
setInput(byte[] b) Устанавливает входные данные для сжатия. |
void |
setInput(byte[] b,
int off,
int len) Устанавливает входные данные для сжатия. |
void |
setLevel(int level) Устанавливает уровень сжатия до указанного значения. |
void |
setStrategy(int strategy) Устанавливает стратегию сжатия до указанного значения. |
Методы, унаследованные от класса java.lang.Object
clone, equals, 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[] b,
int off,
int len) Устанавливает входные данные для сжатия. Это следует вызывать всякий раз, когда needsInput() возвращает true, указывая, что требуются дополнительные входные данные.
- Параметры:
-
b- байты входных данных -
off- начальный смещение данных -
len- длина данных - См. также:
needsInput()
setInput
public void setInput(byte[] b)
Устанавливает входные данные для сжатия. Это следует вызывать всякий раз, когда needsInput() возвращает true, указывая, что требуются дополнительные входные данные.
- Параметры:
-
b- байты входных данных - См. также:
needsInput()
setDictionary
public void setDictionary(byte[] b,
int off,
int len) Устанавливает предварительно заданный словарь для сжатия. Предварительно заданный словарь используется, когда буфер истории может быть предопределен. Когда данные впоследствии распаковываются с помощью Inflater.inflate(), Inflater.getAdler() можно вызвать для получения значения Adler-32 словаря, необходимого для распаковки.
- Параметры:
-
b- байты данных словаря -
off- начальный смещение данных -
len- длина данных - См. также:
-
Inflater.inflate(byte[], int, int),Inflater.getAdler()
setDictionary
public void setDictionary(byte[] b)
Устанавливает предварительно заданный словарь для сжатия. Предварительно заданный словарь используется, когда буфер истории может быть предопределен. Когда данные впоследствии распаковываются с помощью Inflater.inflate(), Inflater.getAdler() можно вызвать для получения значения Adler-32 словаря, необходимого для распаковки.
- Параметры:
-
b- байты данных словаря - См. также:
-
Inflater.inflate(byte[], int, int),Inflater.getAdler()
setStrategy
public void setStrategy(int strategy)
Устанавливает стратегию сжатия в указанное значение.
Если стратегия сжатия изменена, следующий вызов deflate скомпрессует доступные входные данные до сих пор со старой стратегией (и, возможно, сбросит их); новая стратегия вступит в силу только после этого вызова.
- Параметры:
-
strategy- новая стратегия сжатия - Исключения:
-
IllegalArgumentException- если стратегия сжатия неверна
setLevel
public void setLevel(int level)
Устанавливает уровень сжатия в указанное значение.
Если уровень сжатия изменен, следующий вызов deflate скомпрессует доступные входные данные до сих пор со старым уровнем (и, возможно, сбросит их); новый уровень вступит в силу только после этого вызова.
- Параметры:
-
level- новый уровень сжатия (0-9) - Исключения:
-
IllegalArgumentException- если уровень сжатия неверен
needsInput
public boolean needsInput()
Возвращает true, если буфер входных данных пуст и следует вызвать setInput() для предоставления дополнительных входных данных.
- Возвращает:
- true, если буфер входных данных пуст и следует вызвать setInput() для предоставления дополнительных входных данных
finish
public void finish()
При вызове указывает, что сжатие должно завершиться текущим содержимым буфера входных данных.
finished
public boolean finished()
Возвращает true, если достигнут конец потока вывода сжатых данных.
- Возвращает:
- true, если достигнут конец потока вывода сжатых данных
deflate
public int deflate(byte[] b,
int off,
int len) Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что needsInput следует вызвать для определения, требуются ли дополнительные входные данные.
Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в виде deflater.deflate(b, off, len) даёт тот же результат, что и вызов deflater.deflate(b, off, len, Deflater.NO_FLUSH).
- Параметры:
-
b- буфер для сжатых данных -
off- начальный смещение данных -
len- максимальное количество байтов сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
deflate
public int deflate(byte[] b)
Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных. Значение 0 указывает, что needsInput следует вызвать для определения, требуются ли дополнительные входные данные.
Этот метод использует NO_FLUSH в качестве режима сброса сжатия. Вызов этого метода в виде deflater.deflate(b) даёт тот же результат, что и вызов deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH).
- Параметры:
-
b- буфер для сжатых данных - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
deflate
public int deflate(byte[] b,
int off,
int len,
int flush) Сжимает входные данные и заполняет указанный буфер сжатыми данными. Возвращает фактическое количество байтов сжатых данных.
Режим сжатия flush может принимать одно из трех значений:
-
NO_FLUSH: позволяет сжатию определить, сколько данных нужно накопить, прежде чем произвести вывод, чтобы достичь наилучшего сжатия (должно использоваться в стандартных сценариях). Значение возврата 0 в этом режиме сжатия указывает на то, что следует вызватьneedsInput()для определения необходимости дополнительных входных данных. -
SYNC_FLUSH: все ожидающие данные вывода в сжатии передаются в указанный буфер вывода, чтобы декомпрессор мог получить все доступные на данный момент входные данные (в частности,needsInput()возвращаетtrueпосле этого вызова, если предоставлено достаточно места в буфере вывода). Сжатие с помощьюSYNC_FLUSHможет ухудшить качество сжатия для некоторых алгоритмов, поэтому оно должно использоваться только при необходимости. -
FULL_FLUSH: все ожидающие данные вывода передаются как сSYNC_FLUSH. Состояние сжатия сбрасывается, чтобы декомпрессор мог начать обработку с этого момента, если предыдущие сжатые данные были повреждены или требуется произвольный доступ. Частое использованиеFULL_FLUSHможет серьезно ухудшить качество сжатия.
В случае FULL_FLUSH или SYNC_FLUSH, если возвращаемое значение равно len, доступное место в буфере вывода b, этот метод следует вызвать снова с тем же параметром flush и большим объемом памяти в буфере вывода.
- Параметры:
-
b- буфер для сжатых данных -
off- начальный смещение данных -
len- максимальное количество байтов сжатых данных -
flush- режим сжатия flush - Возвращает:
- фактическое количество байтов сжатых данных, записанных в буфер вывода
- Исключения:
-
IllegalArgumentException- если режим flush некорректен - С версии:
- 1.7
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()
Закрывает компрессор и отбрасывает все необработанные входные данные. Этот метод следует вызывать, когда компрессор больше не используется, но также будет вызван автоматически методом finalize(). После вызова этого метода поведение объекта Deflater неопределено.
finalize
protected void finalize()
Закрывает компрессор при сборке мусора.
- Переопределяет:
-
finalizeв классеObject - См. также:
-
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.