java - GunzipOutputStream 或类似的东西是否存在?

标签 java http gzip http-compression content-encoding

Handling HTTP ContentEncoding "deflate"相关,我想知道如何使用 OutputStream 来膨胀 gzipdeflate 流。原因如下:

我有一个从 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/

相关文章:

python - 使用 python 请求下载 *.gz 压缩文件会损坏它

gzip - bunzip/bzip2 整个目录而不是目录中的单个文件

linux - bash 解压缩 gz 并存储在变量中

java - 运行 Spring XML 时构建失败

java - 如何从数组列表中提取数字,将它们相加并除以数组列表中的数字数量?

angularjs - 使用 $http.get 进行 ngTableParams 分页

php - 通过以太网安全地将数据从 Arduino 发送到 MySQL 数据库

Java for 循环优化

javascript - AJAX调用SpringBoot Controller 导致CORS错误

android - 休息 API Android 应用程序