解压缩Gzip格式?

时间:2013-04-24 09:56:09

标签: gzip compression inflate-exception

我遇到了Gzip解压缩的问题。

情况是这样的。我有一些UTF-8格式的文本。现在,这个文本在PHP中使用gzdeflate()函数进行压缩,然后存储在Mysql中的blob对象中。

现在我尝试检索blob对象,然后使用Java的Gzip Stream来解压缩它。但它会抛出一个错误,说它不是GZIP格式。

我甚至在Java中使用Inflater来做同样的事情,但现在我得到“DataFormatException:错误的标题检查”。 inflater的代码如下。

 //rs is the resultset
 //blobAsBytes is the byte array
 while(rs.next()){
        blob = rs.getBlob("old_text");
        int blobLength = (int) blob.length();  
        blobAsBytes = blob.getBytes(1, blobLength);
    }

     Inflater decompresser = new Inflater();
     decompresser.setInput(blobAsBytes);
     byte[] result = new byte[100];
     int resultLength = decompresser.inflate(result);  // this is the line where the exception is occurring.
     decompresser.end();

     // Decode the bytes into a String
     String outputString = new String(result, 0, resultLength, "UTF-8");
     System.out.println(outputString);

我必须使用Java执行此操作并获取存储在数据库中的所有文本。

有人可以帮我解决这个问题吗。

1 个答案:

答案 0 :(得分:1)

使用gzencode(),而不是gzdeflate()。后者不生成gzip格式,它产生deflate格式。前 生成gzip格式。 PHP函数非常令人困惑地命名。

或者,在java.util.zip.Inflater构造函数中使用nowrap类,Inflater为true。这将解码Java端的原始deflate数据。