public class Deflater extends Object
以下代码片段使用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
Modifier and Type | Field and Description |
---|---|
static int |
BEST_COMPRESSION
最佳压缩压缩级别。
|
static int |
BEST_SPEED
压缩级别最快的压缩。
|
static int |
DEFAULT_COMPRESSION
默认压缩级别。
|
static int |
DEFAULT_STRATEGY
默认压缩策略。
|
static int |
DEFLATED
减压算法的压缩方法(目前唯一支持的)。
|
static int |
FILTERED
压缩策略最适用于主要由具有随机分布的小值组成的数据。
|
static int |
FULL_FLUSH
压缩冲洗模式用于清除所有待处理输出并重置放气器。
|
static int |
HUFFMAN_ONLY
仅用于霍夫曼编码的压缩策略。
|
static int |
NO_COMPRESSION
压缩等级为无压缩。
|
static int |
NO_FLUSH
压缩冲洗模式用于实现最佳压缩效果。
|
static int |
SYNC_FLUSH
压缩冲洗模式用于清除所有挂起的输出;
可能会降低某些压缩算法的压缩率。
|
Constructor and Description |
---|
Deflater()
创建一个具有默认压缩级别的新压缩器。
|
Deflater(int level)
使用指定的压缩级别创建新的压缩器。
|
Deflater(int level, boolean nowrap)
使用指定的压缩级别创建新的压缩器。
|
Modifier and Type | Method and Description |
---|---|
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)
将压缩策略设置为指定值。
|
public static final int DEFLATED
public static final int NO_COMPRESSION
public static final int BEST_SPEED
public static final int BEST_COMPRESSION
public static final int DEFAULT_COMPRESSION
public static final int FILTERED
public static final int HUFFMAN_ONLY
public static final int DEFAULT_STRATEGY
public static final int NO_FLUSH
deflate(byte[], int, int, int)
,
Constant Field Values
public static final int SYNC_FLUSH
deflate(byte[], int, int, int)
,
Constant Field Values
public static final int FULL_FLUSH
deflate(byte[], int, int, int)
,
Constant Field Values
public Deflater(int level, boolean nowrap)
level
- 压缩级别(0-9)
nowrap
- 如果为true,则使用GZIP兼容压缩
public Deflater(int level)
level
- 压缩级别(0-9)
public Deflater()
public void setInput(byte[] b, int off, int len)
b
- 输入数据字节
off
- 数据的起始偏移量
len
- 数据的长度
needsInput()
public void setInput(byte[] b)
b
- 输入数据字节
needsInput()
public void setDictionary(byte[] b, int off, int len)
b
- 字典数据字节
off
- 数据的起始偏移量
len
- 数据的长度
Inflater.inflate(byte[], int, int)
,
Inflater.getAdler()
public void setDictionary(byte[] b)
b
- 字典数据字节
Inflater.inflate(byte[], int, int)
,
Inflater.getAdler()
public void setStrategy(int strategy)
如果压缩策略发生变化,下一次调用deflate
将使用旧策略压缩可用的输入(并且可能被刷新); 新策略只有在该调用之后才会生效。
strategy
- 新的压缩策略
IllegalArgumentException
- 如果压缩策略无效
public void setLevel(int level)
如果压缩级别发生变化,下一次调用deflate
将压缩到目前为止可用的旧输入输出(并可能被刷新); 新的级别只有在该调用之后才会生效。
level
- 新的压缩级别(0-9)
IllegalArgumentException
- 如果压缩级别无效
public boolean needsInput()
public void finish()
public boolean finished()
public int deflate(byte[] b, int off, int len)
needsInput
应该为了被调用,以确定是否需要更多的输入数据。
此方法使用NO_FLUSH
作为其压缩冲刷模式。 形式的这种方法的调用deflater.deflate(b, off, len)
产生相同的结果的调用deflater.deflate(b, off, len, Deflater.NO_FLUSH)
。
b
- 压缩数据的缓冲区
off
- 数据的起始偏移量
len
- 压缩数据的最大字节数
public int deflate(byte[] b)
needsInput
应该为了被调用,以确定是否需要更多的输入数据。
此方法使用NO_FLUSH
作为其压缩刷新模式。 形式的这种方法的调用deflater.deflate(b)
产生相同的结果的调用deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH)
。
b
- 压缩数据的缓冲区
public int deflate(byte[] b, int off, int len, int flush)
压缩冲洗模式是以下三种模式之一:
NO_FLUSH
:允许deflater在产生输出之前决定要累积多少数据,以达到最佳压缩(应在正常使用场景中使用)。 在此刷新模式的返回值0表示needsInput()
应该为了被调用,以确定是否需要更多的输入数据。 SYNC_FLUSH
:在deflater所有悬而未决的输出被刷新,到指定的输出缓冲器,使该对压缩数据的工作吹气可以得到可到目前为止,所有输入数据(尤其是needsInput()
个回报true
这个调用后,如果提供足够的输出空间)。 使用SYNC_FLUSH
进行刷新可能会降低某些压缩算法的压缩,因此只有在必要时才能使用。 FULL_FLUSH
:所有待处理输出与SYNC_FLUSH
一样刷新。 压缩状态被重置,使得如果先前的压缩数据已被损坏或者需要随机访问,则从压缩输出数据起作用的充气机可以从该点重新启动。 经常使用FULL_FLUSH
可能会严重降级压缩。 在FULL_FLUSH
或SYNC_FLUSH
的情况下,如果返回值为len
,输出缓冲区b
中len
的空间,此方法应再次调用具有相同的flush
参数和更多的输出空间。
b
- 压缩数据的缓冲区
off
- 数据的起始偏移量
len
- 压缩数据的最大字节数
flush
- 压缩冲洗模式
IllegalArgumentException
- 如果刷新模式无效
public int getAdler()
public int getTotalIn()
由于字节数可能大于Integer.MAX_VALUE,因此getBytesRead()
方法现在是获取此信息的首选方法。
public long getBytesRead()
public int getTotalOut()
由于字节数可能大于Integer.MAX_VALUE,因此getBytesWritten()
方法现在是获取此信息的首选方法。
public long getBytesWritten()
public void reset()
public void end()
protected void finalize()
finalize
在
Object
WeakReference
,
PhantomReference