java - 用 Java 压缩 用 PHP 解压

标签 java php gzip gzipoutputstream

我有一个 servlet 正在向 PHP 脚本提供压缩数据的情况。我在Java端压缩数据没有问题,但是PHP好像无法解压。

这是相关的代码片段 Java 端:

  OutputStream o=response.getOutputStream();

GZIPOutputStream gz=new GZIPOutputStream(o);
gz.write(GridCoder.encode(rs,id, perPage, page).getBytes());
gz.close();
o.close();

PHP 端:

$xml= gzuncompress($xml);

谁能给我指出正确的方向。

最佳答案

刚看到你的问题,很好奇。所以我做了自己的测试用例。我把所有与 Servlet 相关的东西都排除在外,并编写了如下代码:

import java.io.*;
import java.util.zip.GZIPOutputStream;

public class GZIPTestcase {

    public static void main(String[] args) throws Throwable {
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(new FileOutputStream(new File("/Users/malax/foo2.gz")));
        PrintWriter pw = new PrintWriter(gzipOutputStream);

        pw.println("All your base are belong to us!");
        pw.flush();
        pw.close();
    }
}

GNU gunzip 能够解压缩数据。然后我尝试用 PHP 解压缩它。它失败了,你得到了同样的错误。我进一步调查,发现了以下方法:

  • gz解码()
  • gzinflate()

gzinflate 也不起作用,gzdecode 仅随 PHP6 一起提供,我还没有安装。也许你可以试试这个。 (根据 http://bugs.php.net/bug.php?id=22123 这会起作用)

我怀疑问题出在 Java 方面,因为 GNU 的 gunzip 可以压缩数据,所以它一定是正确的。您可能想进一步调查 PHP 方面。

有一个关于 .NET 和 PHP 的真实问题,原始发帖人与您有同样的问题:Can PHP decompress a file compressed with the .NET GZipStream class? . PHP 似乎也无法从 GZIPOutputStream 的 .NET 等价物中解压缩数据。

抱歉,我没有“解决方案”,但无论如何我可能已经为您指明了正确的方向。

编辑:我在 PHP Bugtracker 中找到了一个解释问题的条目: http://bugs.php.net/bug.php?id=22967似乎 gzuncompress 无法解压缩带有将由 GZIPOutputStream 生成的 header 的 GZIP 数据。如 Bugtracker 条目中所述,尝试裁剪标题。

关于java - 用 Java 压缩 用 PHP 解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406917/

相关文章:

PHP:openssl_random_pseudo_bytes() 和加密安全与极端随机性

python - 以与 gunzip 一样快的速度获取 gzip 压缩文件大小(无搜索)

java - 实现 SimpleCursorAdapter 时出错

java - TestNG报告定制

java - Android - 具有形状可绘制对象和以编程方式渐变的自定义按钮

sqlite - 是否可以将 .gzip 文件导入 sqlite/导入时可以跳过某些列吗?

perl - 为什么在 Perl 中将文件读入内存时会占用这么多内存?

java - FlashScope.getCurrent(...) 始终返回新的 FlashScope 实例

php - 同时存在createdBy和updatedBy时正确加入users表

php - 按字母顺序排列阿拉伯名称 Mysql & php