Most visited

Recently visited

Added in API level 1

Deflater

public class Deflater
extends Object

java.lang.Object
   ↳ java.util.zip.Deflater


该类使用流行的ZLIB压缩库为通用压缩提供支持。 ZLIB压缩库最初是作为PNG图形标准的一部分开发的,不受专利保护。 它在java.util.zip package description的规格中有详细描述。

以下代码片段演示了使用 DeflaterInflater对字符串进行的简单压缩和解压缩。

 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
 }
 

也可以看看:

Summary

Constants

int BEST_COMPRESSION

最佳压缩的压缩级别。

int BEST_SPEED

压缩级别最快的压缩。

int DEFAULT_COMPRESSION

默认压缩级别。

int DEFAULT_STRATEGY

默认压缩策略。

int DEFLATED

deflate算法的压缩方法(目前唯一支持的方法)。

int FILTERED

压缩策略最适用于大部分数值较小且数据分布随机分布的数据。

int FULL_FLUSH

压缩冲洗模式用于清除所有待处理的输出并重置拆卸器。

int HUFFMAN_ONLY

仅用于霍夫曼编码的压缩策略。

int NO_COMPRESSION

不压缩的压缩级别。

int NO_FLUSH

压缩刷新模式用于实现最佳压缩结果。

int SYNC_FLUSH

压缩刷新模式用于清除所有待处理的输出; 可能会降低某些压缩算法的压缩率。

Public constructors

Deflater(int level, boolean nowrap)

使用指定的压缩级别创建一个新的压缩器。

Deflater(int level)

使用指定的压缩级别创建一个新的压缩器。

Deflater()

用默认的压缩级别创建一个新的压缩器。

Public methods

int deflate(byte[] b, int off, int len)

压缩输入数据并用压缩数据填充指定的缓冲区。

int deflate(byte[] b)

压缩输入数据并用压缩数据填充指定的缓冲区。

int deflate(byte[] b, int off, int len, int flush)

压缩输入数据并用压缩数据填充指定的缓冲区。

void end()

关闭压缩机并丢弃任何未处理的输入。

void finish()

当被调用时,表示压缩应该以输入缓冲区的当前内容结束。

boolean finished()

如果已达到压缩数据输出流的结尾,则返回true。

int getAdler()

返回未压缩数据的ADLER-32值。

long getBytesRead()

返回到目前为止输入的未压缩字节的总数。

long getBytesWritten()

返回迄今为止输出的压缩字节总数。

int getTotalIn()

返回到目前为止输入的未压缩字节的总数。

int getTotalOut()

返回迄今为止输出的压缩字节总数。

boolean needsInput()

如果输入数据缓冲区为空,并且应该调用setInput()以提供更多输入,则返回true。

void reset()

重置deflater,以便可以处理一组新的输入数据。

void setDictionary(byte[] b, int off, int len)

设置预设字典进行压缩。

void setDictionary(byte[] b)

设置预设字典进行压缩。

void setInput(byte[] b, int off, int len)

设置压缩输入数据。

void setInput(byte[] b)

设置压缩输入数据。

void setLevel(int level)

将当前压缩级别设置为指定值。

void setStrategy(int strategy)

将压缩策略设置为指定的值。

Protected methods

void finalize()

收集垃圾时关闭压缩机。

Inherited methods

From class java.lang.Object

Constants

BEST_COMPRESSION

Added in API level 1
int BEST_COMPRESSION

最佳压缩的压缩级别。

常量值:9(0x00000009)

BEST_SPEED

Added in API level 1
int BEST_SPEED

压缩级别最快的压缩。

常数值:1(0x00000001)

DEFAULT_COMPRESSION

Added in API level 1
int DEFAULT_COMPRESSION

默认压缩级别。

常量值:-1(0xffffffff)

DEFAULT_STRATEGY

Added in API level 1
int DEFAULT_STRATEGY

默认压缩策略。

常量值:0(0x00000000)

DEFLATED

Added in API level 1
int DEFLATED

deflate算法的压缩方法(目前唯一支持的方法)。

常量值:8(0x00000008)

FILTERED

Added in API level 1
int FILTERED

压缩策略最适用于大部分数值较小且数据分布随机分布的数据。 强制更多的霍夫曼编码和更少的字符串匹配。

常数值:1(0x00000001)

FULL_FLUSH

Added in API level 19
int FULL_FLUSH

压缩冲洗模式用于清除所有待处理的输出并重置拆卸器。 经常使用这种模式会严重降低压缩率。

也可以看看:

常量值:3(0x00000003)

HUFFMAN_ONLY

Added in API level 1
int HUFFMAN_ONLY

仅用于霍夫曼编码的压缩策略。

常量值:2(0x00000002)

NO_COMPRESSION

Added in API level 1
int NO_COMPRESSION

不压缩的压缩级别。

常量值:0(0x00000000)

NO_FLUSH

Added in API level 19
int NO_FLUSH

压缩刷新模式用于实现最佳压缩结果。

也可以看看:

常量值:0(0x00000000)

SYNC_FLUSH

Added in API level 19
int SYNC_FLUSH

压缩刷新模式用于清除所有待处理的输出; 可能会降低某些压缩算法的压缩率。

也可以看看:

常量值:2(0x00000002)

Public constructors

Deflater

Added in API level 1
Deflater (int level, 
                boolean nowrap)

使用指定的压缩级别创建一个新的压缩器。 如果'nowrap'为true,那么将不会使用ZLIB头和校验和字段,以支持GZIP和PKZIP中使用的压缩格式。

Parameters
level int: the compression level (0-9)
nowrap boolean: if true then use GZIP compatible compression

Deflater

Added in API level 1
Deflater (int level)

使用指定的压缩级别创建一个新的压缩器。 压缩数据将以ZLIB格式生成。

Parameters
level int: the compression level (0-9)

Deflater

Added in API level 1
Deflater ()

用默认的压缩级别创建一个新的压缩器。 压缩数据将以ZLIB格式生成。

Public methods

deflate

Added in API level 1
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)结果相同。

Parameters
b byte: the buffer for the compressed data
off int: the start offset of the data
len int: the maximum number of bytes of compressed data
Returns
int the actual number of bytes of compressed data written to the output buffer

deflate

Added in API level 1
int deflate (byte[] b)

压缩输入数据并用压缩数据填充指定的缓冲区。 返回压缩数据的实际字节数。 返回值0表示应该调用needsInput以确定是否需要更多输入数据。

该方法使用NO_FLUSH作为压缩冲洗模式。 调用deflater.deflate(b)格式的这种方法将产生与调用deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH)相同的结果。

Parameters
b byte: the buffer for the compressed data
Returns
int the actual number of bytes of compressed data written to the output buffer

deflate

Added in API level 19
int deflate (byte[] b, 
                int off, 
                int len, 
                int flush)

压缩输入数据并用压缩数据填充指定的缓冲区。 返回压缩数据的实际字节数。

压缩刷新模式是以下三种模式之一:

  • NO_FLUSH: allows the deflater to decide how much data to accumulate, before producing output, in order to achieve the best compression (should be used in normal use scenario). A return value of 0 in this flush mode indicates that needsInput() should be called in order to determine if more input data is required.
  • SYNC_FLUSH: all pending output in the deflater is flushed, to the specified output buffer, so that an inflater that works on compressed data can get all input data available so far (In particular the needsInput() returns true after this invocation if enough output space is provided). Flushing with SYNC_FLUSH may degrade compression for some compression algorithms and so it should be used only when necessary.
  • FULL_FLUSH: all pending output is flushed out as with SYNC_FLUSH. The compression state is reset so that the inflater that works on the compressed output data can restart from this point if previous compressed data has been damaged or if random access is desired. Using FULL_FLUSH too often can seriously degrade compression.

FULL_FLUSHSYNC_FLUSH的情况下,如果返回值为 len (输出缓冲区 b可用的空间),则应该再次使用相同的参数 flush和更多输出空间调用此方法。

Parameters
b byte: the buffer for the compressed data
off int: the start offset of the data
len int: the maximum number of bytes of compressed data
flush int: the compression flush mode
Returns
int the actual number of bytes of compressed data written to the output buffer
Throws
IllegalArgumentException if the flush mode is invalid

end

Added in API level 1
void end ()

关闭压缩机并丢弃任何未处理的输入。 这个方法应该在压缩机不再使用时调用,但也会通过finalize()方法自动调用。 一旦这个方法被调用,Deflater对象的行为是不确定的。

finish

Added in API level 1
void finish ()

当被调用时,表示压缩应该以输入缓冲区的当前内容结束。

finished

Added in API level 1
boolean finished ()

如果已达到压缩数据输出流的结尾,则返回true。

Returns
boolean true if the end of the compressed data output stream has been reached

getAdler

Added in API level 1
int getAdler ()

返回未压缩数据的ADLER-32值。

Returns
int the ADLER-32 value of the uncompressed data

getBytesRead

Added in API level 1
long getBytesRead ()

返回到目前为止输入的未压缩字节的总数。

Returns
long the total (non-negative) number of uncompressed bytes input so far

getBytesWritten

Added in API level 1
long getBytesWritten ()

返回迄今为止输出的压缩字节总数。

Returns
long the total (non-negative) number of compressed bytes output so far

getTotalIn

Added in API level 1
int getTotalIn ()

返回到目前为止输入的未压缩字节的总数。

由于字节数可能大于Integer.MAX_VALUE,因此 getBytesRead()方法是获取此信息的首选方法。

Returns
int the total number of uncompressed bytes input so far

getTotalOut

Added in API level 1
int getTotalOut ()

返回迄今为止输出的压缩字节总数。

由于字节数可能大于Integer.MAX_VALUE,因此 getBytesWritten()方法是获取此信息的首选方法。

Returns
int the total number of compressed bytes output so far

needsInput

Added in API level 1
boolean needsInput ()

如果输入数据缓冲区为空,并且应该调用setInput()以提供更多输入,则返回true。

Returns
boolean true if the input data buffer is empty and setInput() should be called in order to provide more input

reset

Added in API level 1
void reset ()

重置deflater,以便可以处理一组新的输入数据。 保持当前的压缩级别和策略设置。

setDictionary

Added in API level 1
void setDictionary (byte[] b, 
                int off, 
                int len)

设置预设字典进行压缩。 当可以预先确定历史缓冲器时使用预设字典。 当数据随后使用Inflater.inflate()进行解压缩时,可以调用Inflater.getAdler()以获取解压缩所需的字典的Adler-32值。

Parameters
b byte: the dictionary data bytes
off int: the start offset of the data
len int: the length of the data

也可以看看:

setDictionary

Added in API level 1
void setDictionary (byte[] b)

设置预设字典进行压缩。 当可以预先确定历史缓冲器时使用预设字典。 当数据随后使用Inflater.inflate()进行解压缩时,可以调用Inflater.getAdler()以获取解压缩所需的字典的Adler-32值。

Parameters
b byte: the dictionary data bytes

也可以看看:

setInput

Added in API level 1
void setInput (byte[] b, 
                int off, 
                int len)

设置压缩输入数据。 只要needsInput()返回true,就应该调用它,这表示需要更多的输入数据。

Parameters
b byte: the input data bytes
off int: the start offset of the data
len int: the length of the data

也可以看看:

setInput

Added in API level 1
void setInput (byte[] b)

设置压缩输入数据。 只要needsInput()返回true,就应该调用它,这表示需要更多的输入数据。

Parameters
b byte: the input data bytes

也可以看看:

setLevel

Added in API level 1
void setLevel (int level)

将当前压缩级别设置为指定值。

Parameters
level int: the new compression level (0-9)
Throws
IllegalArgumentException if the compression level is invalid

setStrategy

Added in API level 1
void setStrategy (int strategy)

将压缩策略设置为指定的值。

Parameters
strategy int: the new compression strategy
Throws
IllegalArgumentException if the compression strategy is invalid

Protected methods

finalize

Added in API level 1
void finalize ()

收集垃圾时关闭压缩机。

Hooray!