我遇到了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执行此操作并获取存储在数据库中的所有文本。
有人可以帮我解决这个问题吗。
答案 0 :(得分:1)
使用gzencode()
,而不是gzdeflate()
。后者不生成gzip格式,它产生deflate格式。前 生成gzip格式。 PHP函数非常令人困惑地命名。
或者,在java.util.zip.Inflater
构造函数中使用nowrap
类,Inflater
为true。这将解码Java端的原始deflate数据。