返回介绍

java.util.zip 类 Inflater

发布于 2019-10-04 09:52:02 字数 10820 浏览 966 评论 0 收藏 0

java.lang.Object
  └java.util.zip.Inflater

public class Inflater
extends Object
 

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

以下代码片段演示使用 DeflaterInflater 压缩和解压缩字符串的详细过程。

 // 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");

 

另请参见:
Deflater

 

构造方法摘要
Inflater() 创建新的解压缩器。
Inflater(booleannowrap) 创建新的解压缩器。
方法摘要
voidend() 关闭解压缩器并放弃所有未处理的输入。
protected voidfinalize() 回收垃圾时关闭解压缩器。
booleanfinished() 如果已到达压缩数据流的结尾,则返回 true。
intgetAdler() 返回未压缩数据的 ADLER-32 值。
longgetBytesRead() 返回到目前为止输入压缩字节的总数。
longgetBytesWritten() 返回到目前为止输出未压缩字节的总数。
intgetRemaining() 返回输入缓冲区中剩余的字节总数。
intgetTotalIn() 返回到目前为止输入压缩字节的总数。
intgetTotalOut() 返回到目前为止输出未压缩字节的总数。
intinflate(byte[]b) 将字节解压缩到指定的缓冲区。
intinflate(byte[]b, intoff, intlen) 将字节解压缩到指定的缓冲区。
booleanneedsDictionary() 如果解压缩需要预置字典,则返回 true。
booleanneedsInput() 如果输入缓冲区中没有剩余数据,则返回 true。
voidreset() 重置 inflater 以处理新的输入数据集合。
voidsetDictionary(byte[]b) 为给定字节的数组设置预置字典。
voidsetDictionary(byte[]b, intoff, intlen) 为给定的字节数组设置预置字典。
voidsetInput(byte[]b) 为解压缩设置输入数据。
voidsetInput(byte[]b, intoff, intlen) 为解压缩设置输入数据。
从类 java.lang.Object 继承的方法
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

 

构造方法详细信息

Inflater

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

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

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

Inflater

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

方法详细信息

setInput

public void setInput(byte[]b,
                     intoff,
                     intlen)
为解压缩设置输入数据。应该在 needsInput() 返回 true 时进行调用,以指示需要更多的输入数据。
参数:
b - 输入数据字节
off - 输入数据的初始偏移量
len - 输入数据的长度
另请参见:
needsInput()

setInput

public void setInput(byte[]b)
为解压缩设置输入数据。应该在 needsInput() 返回 true 时进行调用,以指示需要更多的输入数据。
参数:
b - 输入数据字节
另请参见:
needsInput()

setDictionary

public void setDictionary(byte[]b,
                          intoff,
                          intlen)
为给定的字节数组设置预置字典。应该在 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,
                   intoff,
                   intlen)
            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()
返回到目前为止输入压缩字节的总数。
返回:
到目前为止输入压缩字节的总数(非负)。

getTotalOut

public int getTotalOut()
返回到目前为止输出未压缩字节的总数。

由于该字节数可能大于 Integer.MAX_VALUE,因此 getBytesWritten() 方法现在是获取此信息的首选方法。

返回:
到目前为止输出未压缩字节的总数

getBytesWritten

public long getBytesWritten()
返回到目前为止输出未压缩字节的总数。
返回:
到目前为止输出未压缩字节的总数(非负)

reset

public void reset()
重置 inflater 以处理新的输入数据集合。

end

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

finalize

protected void finalize()
回收垃圾时关闭解压缩器。
覆盖:
Object 中的 finalize

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文