与Handling HTTP ContentEncoding "deflate"相关,我想知道如何使用 OutputStream
来膨胀 gzip
和 deflate
流。原因如下:
我有一个从 Web 服务器获取资源的类(想想 wget
,但在 Java 中)。我严格执行响应的 Content-Length,我想保持这种执行。因此,我想做的是从响应中读取特定数量的字节(我已经在这样做),但如果响应已被压缩,则让它生成更多字节。
我有这样的 deflate
响应:
OutputStream out = System.out;
out = new InflateOutputStream(out);
// repeatedly:
out.write(compressedBytesFromResponse);
我希望能够对 gzip
响应做同样的事情,但是没有 GunzipOutputStream,我不确定下一步该做什么。
更新
我正在考虑构建类似 this 的东西,但它似乎完全疯了。也许这是使用 OutputStream
来膨胀我的数据的唯一方法。
最佳答案
对于 deflate
,Java 有 InflaterOutputStream这可以满足您的需要:向其提供压缩的压缩数据,并将未压缩的数据发送到其底层输出流。
对于 gzip
... 似乎找不到等效项。 InflaterOutputStream
的伙伴 InflaterInputStream
有一个 GZipInputStream
子类来处理所有的头,但是没有等效的解压缩输出流类可能会是 InflaterOutputStream
的子类。
自己为 GZIP 构建 InflaterOutputStream
的子类看起来很麻烦,查看 GZipInputStream
的源代码(处理标题、尾部等)
使用管道流似乎是两害相权取其轻。
关于java - GunzipOutputStream 或类似的东西是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874193/