如何以GZIP格式输出deflater的结果?

时间:2011-10-27 01:02:58

标签: java gzip deflate

我正在使用Java。

我想使用Deflater class来缩小某些输入,然后我想以GZIP格式输出它,以便可以用GZIP解压缩。我怎样才能做到这一点?我的理解是它会以不同的格式输出它。我是一个菜鸟,所以如果你能明确并且可能给出一个非常有用的代码示例。

我无法使用GZIPOutputStream,因为我需要在输出之前使用一些Deflater类特定功能。

2 个答案:

答案 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调用。

变量defGZIPOutputStream的受保护成员,因此需要进行子类化才能访问它。

答案 1 :(得分:0)

第一个问题是为什么?

GZIPping Deflater的输出意味着收件人必须同时进行GUnzip和inflate。

GZIPping Deflater的输出可能会增加大小。它肯定不会显着压缩它。

如果您需要GZIP输出,请忘记Deflater。

如果您需要字典,请忘记GZIP输出。