public class Deflater
extends Object
java.lang.Object | |
↳ | java.util.zip.Deflater |
该类使用流行的ZLIB压缩库为通用压缩提供支持。 ZLIB压缩库最初是作为PNG图形标准的一部分开发的,不受专利保护。 它在java.util.zip package description的规格中有详细描述。
以下代码片段演示了使用 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 }
也可以看看:
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
|
int FILTERED
压缩策略最适用于大部分数值较小且数据分布随机分布的数据。 强制更多的霍夫曼编码和更少的字符串匹配。
常数值:1(0x00000001)
int FULL_FLUSH
压缩冲洗模式用于清除所有待处理的输出并重置拆卸器。 经常使用这种模式会严重降低压缩率。
常量值:3(0x00000003)
int SYNC_FLUSH
压缩刷新模式用于清除所有待处理的输出; 可能会降低某些压缩算法的压缩率。
常量值:2(0x00000002)
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 (int level)
使用指定的压缩级别创建一个新的压缩器。 压缩数据将以ZLIB格式生成。
Parameters | |
---|---|
level |
int : the compression level (0-9) |
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 |
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 |
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_FLUSH
或 SYNC_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 |
void end ()
关闭压缩机并丢弃任何未处理的输入。 这个方法应该在压缩机不再使用时调用,但也会通过finalize()方法自动调用。 一旦这个方法被调用,Deflater对象的行为是不确定的。
boolean finished ()
如果已达到压缩数据输出流的结尾,则返回true。
Returns | |
---|---|
boolean |
true if the end of the compressed data output stream has been reached |
int getAdler ()
返回未压缩数据的ADLER-32值。
Returns | |
---|---|
int |
the ADLER-32 value of the uncompressed data |
long getBytesRead ()
返回到目前为止输入的未压缩字节的总数。
Returns | |
---|---|
long |
the total (non-negative) number of uncompressed bytes input so far |
long getBytesWritten ()
返回迄今为止输出的压缩字节总数。
Returns | |
---|---|
long |
the total (non-negative) number of compressed bytes output so far |
int getTotalIn ()
返回到目前为止输入的未压缩字节的总数。
由于字节数可能大于Integer.MAX_VALUE,因此 getBytesRead()
方法是获取此信息的首选方法。
Returns | |
---|---|
int |
the total number of uncompressed bytes input so far |
int getTotalOut ()
返回迄今为止输出的压缩字节总数。
由于字节数可能大于Integer.MAX_VALUE,因此 getBytesWritten()
方法是获取此信息的首选方法。
Returns | |
---|---|
int |
the total number of compressed bytes output so far |
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 |
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 |
也可以看看:
void setDictionary (byte[] b)
设置预设字典进行压缩。 当可以预先确定历史缓冲器时使用预设字典。 当数据随后使用Inflater.inflate()进行解压缩时,可以调用Inflater.getAdler()以获取解压缩所需的字典的Adler-32值。
Parameters | |
---|---|
b |
byte : the dictionary data bytes |
也可以看看:
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 |
也可以看看:
void setInput (byte[] b)
设置压缩输入数据。 只要needsInput()返回true,就应该调用它,这表示需要更多的输入数据。
Parameters | |
---|---|
b |
byte : the input data bytes |
也可以看看:
void setLevel (int level)
将当前压缩级别设置为指定值。
Parameters | |
---|---|
level |
int : the new compression level (0-9) |
Throws | |
---|---|
IllegalArgumentException |
if the compression level is invalid |
void setStrategy (int strategy)
将压缩策略设置为指定的值。
Parameters | |
---|---|
strategy |
int : the new compression strategy |
Throws | |
---|---|
IllegalArgumentException |
if the compression strategy is invalid |