java.util.zip

接口
异常
错误
java.lang.Object
  继承者 java.util.zip.Deflater

public class Deflater
     
extends Object

此类使用流行的 ZLIB 压缩程序库为通用压缩提供支持。ZLIB 压缩程序库最初是作为 PNG 图形标准的一部分开发的,不受专利的保护。有关该规范的完整描述,请参见 java.util.zip 包描述

以下代码片段演示使用 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);

 // 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 HUFFMAN_ONLY
          仅适用于 Huffman 编码的压缩策略。
static int NO_COMPRESSION
          无压缩的压缩级别。
 
构造方法摘要
Deflater()
          使用默认压缩级别创建新的压缩器。
Deflater(int level)
          使用指定压缩级别创建新的压缩器。
Deflater(int level, boolean nowrap)
          使用指定压缩级别创建新的压缩器。
 
方法摘要
 int deflate(byte[] b)
          使用压缩数据填充指定缓冲区。
 int deflate(byte[] b, int off, int len)
          使用压缩数据填充指定缓冲区。
 void end()
          关闭解压缩器并放弃所有未处理的输入。
protected  void finalize()
          回收垃圾时关闭压缩器。
 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)
          为压缩预置字典。
 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 编码和较少的字符串匹配。

另请参见:
常量字段值

HUFFMAN_ONLY

public static final int HUFFMAN_ONLY
仅适用于 Huffman 编码的压缩策略。

另请参见:
常量字段值

DEFAULT_STRATEGY

public static final int DEFAULT_STRATEGY
默认压缩策略。

另请参见:
常量字段值
构造方法详细信息

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)
将压缩策略设置为指定值。

参数:
strategy - 新的压缩策略
抛出:
IllegalArgumentException - 如果压缩策略无效

setLevel

public void setLevel(int level)
将当前压缩级别设置为指定值。

参数:
level - 新的压缩级别 (0-9)
抛出:
IllegalArgumentException - 如果压缩级别无效

needsInput

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

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

finish

public void finish()
调用时,指示压缩应当以输入缓冲区的当前内容结尾。


finished

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

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

deflate

public int deflate(byte[] b,
                   int off,
                   int len)
使用压缩数据填充指定缓冲区。返回压缩数据的实际字节数。返回值为 0 指示应调用 needsInput() 来确定是否需要更多的输入数据。

参数:
b - 压缩数据的缓冲区
off - 数据的初始偏移量
len - 压缩数据的最大字节数
返回:
压缩数据的实际字节数

deflate

public int deflate(byte[] b)
使用压缩数据填充指定缓冲区。返回压缩数据的实际字节数。返回值为 0 指示应调用 needsInput() 来确定是否需要更多的输入数据。

参数:
b - 压缩数据的缓冲区
返回:
压缩数据的实际字节数

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

protected void finalize()
回收垃圾时关闭压缩器。

覆盖:
Object 中的 finalize