返回介绍

java.util.zip 类 Deflater

发布于 2019-10-04 09:52:01 字数 13890 浏览 1686 评论 0 收藏 0

java.lang.Object
  └java.util.zip.Deflater

public class Deflater
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");

 

另请参见:
Inflater

 

字段摘要
staticintBEST_COMPRESSION 最佳压缩的压缩级别。
staticintBEST_SPEED 最快压缩的压缩级别。
staticintDEFAULT_COMPRESSION 默认压缩级别。
staticintDEFAULT_STRATEGY 默认压缩策略。
staticintDEFLATED deflate 算法(当前支持的惟一算法)的压缩方法。
staticintFILTERED 最适用于主要由小值组成并具有某种程度随意分布的数据的压缩策略。
staticintHUFFMAN_ONLY 仅适用于 Huffman 编码的压缩策略。
staticintNO_COMPRESSION 无压缩的压缩级别。
构造方法摘要
Deflater() 使用默认压缩级别创建新的压缩器。
Deflater(intlevel) 使用指定压缩级别创建新的压缩器。
Deflater(intlevel, booleannowrap) 使用指定压缩级别创建新的压缩器。
方法摘要
intdeflate(byte[]b) 使用压缩数据填充指定缓冲区。
intdeflate(byte[]b, intoff, intlen) 使用压缩数据填充指定缓冲区。
voidend() 关闭解压缩器并放弃所有未处理的输入。
protected voidfinalize() 回收垃圾时关闭压缩器。
voidfinish() 调用时,指示压缩应当以输入缓冲区的当前内容结尾。
booleanfinished() 如果已到达压缩数据输出流的结尾,则返回 true。
intgetAdler() 返回未压缩数据的 ADLER-32 值。
longgetBytesRead() 返回到目前为止输入未压缩字节的总数。
longgetBytesWritten() 返回到目前为止输出压缩字节的总数。
intgetTotalIn() 返回到目前为止输入未压缩字节的总数。
intgetTotalOut() 返回到目前为止输出压缩字节的总数。
booleanneedsInput() 如果输入数据缓冲区为空,并且应调用 setInput() 以提供更多输入,则返回 true。
voidreset() 重置 deflater 以处理新的输入数据集合。
voidsetDictionary(byte[]b) 为压缩预置字典。
voidsetDictionary(byte[]b, intoff, intlen) 为压缩设置预置字典。
voidsetInput(byte[]b) 为压缩设置输入数据。
voidsetInput(byte[]b, intoff, intlen) 为压缩设置输入数据。
voidsetLevel(intlevel) 将当前压缩级别设置为指定值。
voidsetStrategy(intstrategy) 将压缩策略设置为指定值。
从类 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(intlevel,
                booleannowrap)
使用指定压缩级别创建新的压缩器。如果 'nowrap' 为 true,则不使用 ZLIB 头和校验和字段,以便支持在 GZIP 和 PKZIP 中使用的压缩格式。
参数:
level - 压缩级别 (0-9)
nowrap - 如果为 true ,则使用 GZIP 兼容的压缩

Deflater

public Deflater(intlevel)
使用指定压缩级别创建新的压缩器。压缩的数据将以 ZLIB 格式生成。
参数:
level - 压缩级别 (0-9)

Deflater

public Deflater()
使用默认压缩级别创建新的压缩器。压缩的数据将以 ZLIB 格式生成。

方法详细信息

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)
为压缩设置预置字典。预置字典在历史缓冲区可预定时使用。当以后使用 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(intstrategy)
将压缩策略设置为指定值。
参数:
strategy - 新的压缩策略
抛出:
IllegalArgumentException - 如果压缩策略无效

setLevel

public void setLevel(intlevel)
将当前压缩级别设置为指定值。
参数:
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,
                   intoff,
                   intlen)
使用压缩数据填充指定缓冲区。返回压缩数据的实际字节数。返回值为 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()
返回到目前为止输入未压缩字节的总数。
返回:
到目前为止输入未压缩字节的总数(非负)

getTotalOut

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

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

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

getBytesWritten

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

reset

public void reset()
重置 deflater 以处理新的输入数据集合。保持当前压缩级别和策略设置。

end

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

finalize

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

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

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

发布评论

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