java.util.zip

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

public class Inflater
     
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
 }
 

另请参见:
Deflater

构造方法摘要
Inflater()
          创建新的解压缩器。
Inflater(boolean nowrap)
          创建新的解压缩器。
 
方法摘要
 void end()
          关闭解压缩器并放弃所有未处理的输入。
protected  void finalize()
          回收垃圾时关闭解压缩器。
 boolean finished()
          如果已到达压缩数据流的结尾,则返回 true。
 int getAdler()
          返回未压缩数据的 ADLER-32 值。
 long getBytesRead()
          返回到目前为止输入压缩字节的总数。
 long getBytesWritten()
          返回到目前为止输出未压缩字节的总数。
 int getRemaining()
          返回输入缓冲区中剩余的字节总数。
 int getTotalIn()
          返回到目前为止输入压缩字节的总数。
 int getTotalOut()
          返回到目前为止输出未压缩字节的总数。
 int inflate(byte[] b)
          将字节解压缩到指定的缓冲区。
 int inflate(byte[] b, int off, int len)
          将字节解压缩到指定的缓冲区。
 boolean needsDictionary()
          如果解压缩需要预置字典,则返回 true。
 boolean needsInput()
          如果输入缓冲区中没有剩余数据,则返回 true。
 void reset()
          重置 inflater 以处理新的输入数据集。
 void setDictionary(byte[] b)
          为给定字节的数组设置预置字典。
 void setDictionary(byte[] b, int off, int len)
          为给定的字节数组设置预置字典。
 void setInput(byte[] b)
          为解压缩设置输入数据。
 void setInput(byte[] b, int off, int len)
          为解压缩设置输入数据。
 
从类 java.lang.Object 继承的方法
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

Inflater

public Inflater(boolean nowrap)
创建新的解压缩器。如果参数 'nowrap' 为 true,则不使用 ZLIB 头和校验和字段。这提供了与 GZIP 和 PKZIP 所用压缩格式的兼容性。

注:使用 'nowrap' 选项时,还需要提供额外的 "dummy" 字节作为输入。当 ZLIB 本机库需要支持某些优化时,这是必需的。

参数:
nowrap - 如果为 true,则支持 GZIP 兼容的压缩

Inflater

public Inflater()
创建新的解压缩器。

方法详细信息

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)
为给定的字节数组设置预置字典。应该在 inflate() 返回 0 且 needsDictionary() 返回 true 时进行调用,以指示需要预置字典。可以使用方法 getAdler() 获取所需字典的 Adler-32 值。

参数:
b - 字典数据字节
off - 数据的初始偏移量
len - 数据的长度
另请参见:
needsDictionary(), getAdler()

setDictionary

public void setDictionary(byte[] b)
为给定字节的数组设置预置字典。应该在 inflate() 返回 0 且 needsDictionary() 返回 true 时调用,以指示需要预置字典。可以使用方法 getAdler() 获取所需字典的 Adler-32 值。

参数:
b - 字典数据字节
另请参见:
needsDictionary(), getAdler()

getRemaining

public int getRemaining()
返回输入缓冲区中剩余的字节总数。该方法可用于查找在完成解压缩后输入缓冲区中还有哪些字节。

返回:
输入缓冲区中剩余的字节总数

needsInput

public boolean needsInput()
如果输入缓冲区中没有剩余数据,则返回 true。此方法用于确定是否调用 #setInputThis 以提供更多输入。

返回:
如果缓冲区中没有剩余数据,则返回 true

needsDictionary

public boolean needsDictionary()
如果解压缩需要预置字典,则返回 true。

返回:
如果解压缩需要预置字典,则返回 true
另请参见:
setDictionary(byte[], int, int)

finished

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

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

inflate

public int inflate(byte[] b,
                   int off,
                   int len)
            throws DataFormatException
将字节解压缩到指定的缓冲区。返回实际的未压缩字节数。返回值为 0 指示应调用 needsInput() 或 needsDictionary(),以确定是否需要更多的输入数据或预置字典。在后一种情况下,getAdler() 可用于获取所需字典的 Adler-32 值。

参数:
b - 未压缩数据的缓冲区
off - 数据的初始偏移量
len - 最大未压缩字节数
返回:
实际未压缩字节数
抛出:
DataFormatException - 如果压缩数据格式无效
另请参见:
needsInput(), needsDictionary()

inflate

public int inflate(byte[] b)
            throws DataFormatException
将字节解压缩到指定的缓冲区。返回实际的未压缩字节数。返回值为 0 指示应调用 needsInput() 或 needsDictionary(),以确定是否需要更多的输入数据或预置字典。在后一种情况下,getAdler() 可用于获取所需字典的 Adler-32 值。

参数:
b - 未压缩数据的缓冲区
返回:
实际未压缩字节数
抛出:
DataFormatException - 如果压缩数据格式无效
另请参见:
needsInput(), needsDictionary()

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()
重置 inflater 以处理新的输入数据集。


end

public void end()
关闭解压缩器并放弃所有未处理的输入。此方法应该在不再使用该解压缩器时进行调用,但是也可以由 finalize() 方法自动调用。调用此方法后,Inflater 对象的行为将是不确定的。


finalize

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

覆盖:
Object 中的 finalize