【问题标题】:How to output the results of deflater in GZIP format?如何以 GZIP 格式输出 deflater 的结果?
【发布时间】:2011-10-27 01:02:57
【问题描述】:

我正在使用 Java。

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

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

【问题讨论】:

  • 您需要哪些 Deflater 类功能?

标签: java gzip deflate


【解决方案1】:

显然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 的受保护成员,因此需要子类化才能访问它。

【讨论】:

    【解决方案2】:

    第一个问题是为什么?

    GZIPping Deflater 的输出意味着接收者必须同时 GUnzip 和 inflate。

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

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

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

    【讨论】:

    • 我不想 GZIP 输出,我想以 GZIP 格式输出,以便可以使用 GZIP 解压缩。基本上,我正在使用 Deflate 实现 GZIP。它与一个学校项目有关,因此可能会很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多