1

我面临 Gzip 解压缩的问题。

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

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

我什至在 Java 中使用 Inflater 来做同样的事情,但现在我得到“DataFormatException:不正确的标头检查”。充气机的代码如下。

 //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 执行此操作并获取存储在数据库中的所有文本。

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

4

1 回答 1

1

使用gzencode(),不使用gzdeflate()。后者不产生 gzip 格式,它产生 deflate 格式。前者确实产生 gzip 格式。PHP 函数的名称非常可怕且令人困惑。

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

于 2013-04-24T13:49:53.453 回答