- java.lang.Object
-
- java.util.zip.Deflater
-
public class Deflater extends Object
该类支持通用压缩使用流行的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 }
- 从以下版本开始:
- 1.1
- 另请参见:
-
Inflater
-
-
Field Summary
Fields Modifier and Type Field 描述 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
压缩冲洗模式用于清除所有挂起的输出; 可能会降低某些压缩算法的压缩率。
-
方法摘要
所有方法 接口方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 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()
已过时。finalize
方法已被弃用。 为了执行清理,覆盖finalize
子类应被修改为使用替代清理机制,并删除覆盖finalize
方法。 当覆盖finalize
方法时,其实现必须明确确保按照super.finalize()
中所述调用super.finalize() 。 有关迁移选项的更多信息,请参阅Object.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)
将压缩策略设置为指定值。
-
-
-
字段详细信息
-
DEFLATED
public static final int DEFLATED
减压算法的压缩方法(目前唯一支持的)。- 另请参见:
- Constant Field Values
-
NO_COMPRESSION
public static final int NO_COMPRESSION
压缩等级为无压缩。- 另请参见:
- Constant Field Values
-
BEST_SPEED
public static final int BEST_SPEED
压缩级别最快的压缩。- 另请参见:
- Constant Field Values
-
BEST_COMPRESSION
public static final int BEST_COMPRESSION
最佳压缩压缩级别。- 另请参见:
- Constant Field Values
-
DEFAULT_COMPRESSION
public static final int DEFAULT_COMPRESSION
默认压缩级别。- 另请参见:
- Constant Field Values
-
FILTERED
public static final int FILTERED
压缩策略最适用于主要由具有随机分布的小值组成的数据。 强制更多的霍夫曼编码和较少的字符串匹配。- 另请参见:
- Constant Field Values
-
HUFFMAN_ONLY
public static final int HUFFMAN_ONLY
仅用于霍夫曼编码的压缩策略。- 另请参见:
- Constant Field Values
-
DEFAULT_STRATEGY
public static final int DEFAULT_STRATEGY
默认压缩策略。- 另请参见:
- Constant Field Values
-
NO_FLUSH
public static final int NO_FLUSH
压缩冲洗模式用于实现最佳压缩效果。- 从以下版本开始:
- 1.7
- 另请参见:
-
deflate(byte[], int, int, int)
, Constant Field Values
-
SYNC_FLUSH
public static final int SYNC_FLUSH
压缩冲洗模式用于清除所有挂起的输出; 可能会降低某些压缩算法的压缩率。- 从以下版本开始:
- 1.7
- 另请参见:
-
deflate(byte[], int, int, int)
, Constant Field Values
-
FULL_FLUSH
public static final int FULL_FLUSH
压缩冲洗模式用于清除所有待处理输出并重置放气器。 使用此模式太频繁可能会严重降低压缩。- 从以下版本开始:
- 1.7
- 另请参见:
-
deflate(byte[], int, int, int)
, Constant Field Values
-
-
构造方法详细信息
-
Deflater
public Deflater(int level, boolean nowrap)
使用指定的压缩级别创建新的压缩器。 如果'nowrap'为真,那么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)
设置压缩输入数据。 当needInput()返回true表示需要更多输入数据时,应该调用此值。- 参数
-
b
- 输入数据字节 -
off
- 数据的起始偏移量 -
len
- 数据的长度 - 另请参见:
-
needsInput()
-
setInput
public void setInput(byte[] b)
设置压缩输入数据。 当needInput()返回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()以提供更多的输入。- 结果
- 如果输入数据缓冲区为空,并且应该调用setInput()以提供更多的输入,则为true
-
finish
public void finish()
当被调用时,表示压缩应以输入缓冲区的当前内容结束。
-
finished
public boolean finished()
如果达到压缩数据输出流的结尾,则返回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)
产生与调用deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH)
相同的结果。- 参数
-
b
- 压缩数据的缓冲区 - 结果
- 压缩数据的实际字节数写入输出缓冲区
-
deflate
public int deflate(byte[] b, int off, int len, int flush)
压缩输入数据,并用压缩数据填充指定的缓冲区。 返回压缩的实际数据字节数。压缩冲洗模式是以下三种模式之一:
-
NO_FLUSH
:为了达到最佳压缩(在正常使用情况下应该使用),允许放样器决定在产生输出之前累积多少数据。 此刷新模式中的返回值为0表示应该调用needsInput()
,以确定是否需要更多的输入数据。 -
SYNC_FLUSH
:在deflater所有悬而未决的输出被刷新,到指定的输出缓冲器,使该对压缩数据的工作吹气可以得到可到目前为止,所有输入数据(尤其是needsInput()
个回报true
这个调用后,如果提供足够的输出空间)。 用SYNC_FLUSH
冲洗可能会降低某些压缩算法的压缩,因此只有在必要时才能使用。 -
FULL_FLUSH
:所有待处理输出都将与SYNC_FLUSH
一起刷新 。 压缩状态被重置,使得如果先前的压缩数据已被损坏或者需要随机访问,则从压缩输出数据起作用的充气机可以从该点重新启动。 使用FULL_FLUSH
也经常会严重降级压缩。
在
FULL_FLUSH
或SYNC_FLUSH
的情况下,如果返回值为len
,输出缓冲区b
可用的空间,此方法应再次调用相同的flush
参数和更多的输出空间。 确保len
大于6,以避免在每次调用此方法时将冲洗标记(5字节)重复输出到输出缓冲区。- 参数
-
b
- 压缩数据的缓冲区 -
off
- 数据的起始偏移量 -
len
- 压缩数据的最大字节数 -
flush
- 压缩冲洗模式 - 结果
- 压缩数据的实际字节数写入输出缓冲区
- 异常
-
IllegalArgumentException
- 如果刷新模式无效 - 从以下版本开始:
- 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()
重置deflater,以便可以处理一组新的输入数据。 保持当前的压缩级别和策略设置。
-
end
public void end()
关闭压缩器并丢弃任何未处理的输入。 当压缩机不再使用时,应该调用此方法,但也可以通过finalize()方法自动调用该方法。 调用此方法后,Deflater对象的行为是未定义的。
-
finalize
@Deprecated(since="9") protected void finalize()
已过时。finalize
方法已被弃用。 为了执行清理,覆盖finalize
子类应被修改为使用替代清理机制,并删除覆盖的finalize
方法。 当覆盖finalize
方法时,其实现必须明确确保按照super.finalize()
中所述调用super.finalize() 。 有关迁移选项的更多信息,请参阅Object.finalize()
的规范。收集垃圾时关闭压缩机。- 重写:
-
finalize
在Object
- 另请参见:
-
WeakReference
,PhantomReference
-
-