因此,我的Java应用程序会显示一些使用PHP的gzdeflate()生成的数据。 现在我正试图用Java来扩充这些数据。这是我到目前为止所得到的:
InflaterInputStream inflInstream = new InflaterInputStream(new ByteArrayInputStream(inputData.getBytes() ), new Inflater());
byte bytes[] = new byte[1024];
while (true) {
int length = inflInstream.read(bytes, 0, 1024);
if (length == -1) break;
System.out.write(bytes, 0, length);
}
'inputData'是一个包含泄漏数据的String。
问题是:.read方法抛出异常:
java.util.zip.ZipException:错误的标题检查
关于此主题的其他网站只会将我重定向到Inflater类的文档,但显然我不知道如何使用它来与PHP兼容。
答案 0 :(得分:7)
根据documentation,php gzdeflate()生成原始deflate数据(RFC 1951),但Java Inflater class期待zlib(RFC 1950)数据,这是zlib头中包含的原始deflate数据和预告片。 除非,否则为Inflater构造函数指定nowrap as true。然后它将解码原始的deflate数据。
InputStream inflInstream = new InflaterInputStream(new ByteArrayInputStream(inputData.getBytes()),
new Inflater(true));
byte bytes[] = new byte[1024];
while (true) {
int length = inflInstream.read(bytes, 0, 1024);
if (length == -1) break;
System.out.write(bytes, 0, length);
}
答案 1 :(得分:1)
根据示例使用GZIPInputStream(不要直接使用Inflater):
http://java.sun.com/developer/technicalArticles/Programming/compression/