我正在使用Java。
我想使用Deflater class来缩小某些输入,然后我想以GZIP格式输出它,以便可以用GZIP解压缩。我怎样才能做到这一点?我的理解是它会以不同的格式输出它。我是一个菜鸟,所以如果你能明确并且可能给出一个非常有用的代码示例。
我无法使用GZIPOutputStream,因为我需要在输出之前使用一些Deflater类特定功能。
答案 0 :(得分:2)
显然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
的受保护成员,因此需要进行子类化才能访问它。
答案 1 :(得分:0)
第一个问题是为什么?
GZIPping Deflater的输出意味着收件人必须同时进行GUnzip和inflate。
GZIPping Deflater的输出可能会增加大小。它肯定不会显着压缩它。
如果您需要GZIP输出,请忘记Deflater。
如果您需要字典,请忘记GZIP输出。