我正在使用 Java。
我想使用Deflater 类对一些输入进行放气,然后我想以 GZIP 格式输出它,以便可以用 GZIP 解压缩。我怎样才能做到这一点?我的理解是它会以不同的格式输出。我是个菜鸟,所以如果你能明确一点,也许可以给出一个非常有用的代码示例。
我不能使用 GZIPOutputStream 因为我需要在输出之前使用一些 Deflater 类特定的功能。
我正在使用 Java。
我想使用Deflater 类对一些输入进行放气,然后我想以 GZIP 格式输出它,以便可以用 GZIP 解压缩。我怎样才能做到这一点?我的理解是它会以不同的格式输出。我是个菜鸟,所以如果你能明确一点,也许可以给出一个非常有用的代码示例。
我不能使用 GZIPOutputStream 因为我需要在输出之前使用一些 Deflater 类特定的功能。
显然无论如何都在引擎盖下GZIPOutputStream
使用Deflater
,所以你不会试图做任何疯狂的事情。
一种可能性(来自this page,可能值得一读)是子类化GZIPOutputStream
,以便您可以访问它的Deflater
对象。或多或少像这样的东西(未经测试):
public class MyGZIPOutputStream extends GZIPOutputStream {
public MyGZIPOutputStream(final OutputStream out) throws IOException {
super(out);
}
public void setDictionary(byte[] b) {
def.setDictionary(b);
}
}
然后,您可以在使用您MyGZIPOutputStream
的保存文件之前进行 setDictionary 调用。
该变量def
是 的受保护成员GZIPOutputStream
,因此需要子类化才能访问它。
第一个问题是为什么?
GZIPping Deflater 的输出意味着接收者必须同时 GUnzip 和 inflate。
GZIPping Deflater 的输出可能会增加大小。它肯定不会显着压缩它。
如果您需要 GZIP 输出,请忘记 Deflater。
如果您需要字典,请忘记 GZIP 输出。