java - Java中的gzinflate

标签 java php interop zlib

因此,我的 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' 是一个包含压缩数据的字符串。

问题是: .read 方法抛出异常:

java.util.zip.ZipException: incorrect header check



关于这个主题的其他网站只会将我重定向到 Inflater 类的文档,但显然我不知道如何使用它来与 PHP 兼容。

最佳答案

documentation , php gzdeflate() 生成原始放气数据(RFC 1951),但 Java 的 Inflater class期待 zlib (RFC 1950) 数据,这是包装在 zlib 头和尾中的原始放气数据。除非您指定 nowrap as true到 Inflater 构造函数。然后它将解码原始放气数据。

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);
}

关于java - Java中的gzinflate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399350/

相关文章:

C# 在使用 LoadLibrary/GetProcAddress 时调用 C 函数崩溃

java - 实例变量没有在方法中被调用

java - JFrame/JPanel 刷新和文本字段

php - Laravel 没有将 Auth::id 插入表中

php - 使用 php 从 MySQL 数据库中检索图像

c++ - 将非托管 C++ 库与 .NET API 结合使用

java - 具有两个流的 Lambda

java - java小程序中的移动图像

php - 为什么这个功能会失败?

c# - 从 C++ 调用 C# 方法而不使用 COM