当前位置: 首页 > 知识库问答 >
问题:

解压缩分为几个部分的GZIP http请求

籍弘伟
2023-03-14

我正在做一个http代理,在解压响应时遇到了一个问题,这些响应是在客户端向服务器发出请求后从服务器发出的。

E、 g.客户端发送gethttps://stackoverflow.com/questions/some_question . 服务器分几个部分发送响应。我使用以下方法对响应部分进行解压缩。

public static void gzipToString(ByteBuf buf) throws IOException {
        Reader reader = null;
        reader = new InputStreamReader(new GZIPInputStream(new ByteBufInputStream(buf)));

        while (true) {
            int ch = reader.read();
            if (ch==-1) {
                break;
            }
            System.out.print((char)ch);
        }
    }

在回应的第一部分

<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/QAPage">

<head>

<title>java - GZIPInputStream to String - Stack Overflow</title>
    <link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d">
    <link rel="apple-touch-icon image_src" href="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a">
    <link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml">
    <meta name="twitter:card" content="summary">
    <meta name="twitter:app:id:googleplay" content="comjava.io.EOFException: Unexpected end of ZLIB input stream

在某种程度上,我得到了comjava。io。EOFException:ZLIB输入流意外结束

其余的响应将在这一行出现例外情况

reader = new InputStreamReader(new GZIPInputStream(new ByteBufInputStream(buf)));



java.util.zip.ZipException: Not in GZIP format
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91)
    at com.verizon.ga.filter.ProxyHttpFilters.gzipToString3(ProxyHttpFilters.java:143)
    at com.verizon.ga.filter.ProxyHttpFilters.serverToProxyResponse(ProxyHttpFilters.java:73)

事实上,在第一次响应时,我得到了EOFException,这使我认为要正确地解压缩响应,我需要将响应的所有部分放在一起。

但由于某些原因,所有其他部分返回的不是GZIP格式。据我所知,只有第一部分有GZIP头。还有一些,虽然是GZIP压缩,但没有头。

我该怎么办?

共有1个答案

颛孙俊
2023-03-14

你不能把一个GZIPInputStream放在一个ByteBuf的前面,这毫无意义:GZIPInputStream对一个完整的输入流进行操作。请看我的答案:https://stackoverflow.com/a/48047974/839733

 类似资料:
  • 然后我在两个压缩文件上运行以下管道。 这将导致我的bucket的以下状态: 如您所见,由pbzip2压缩的未压缩文件太小,无法正确解压缩。似乎只有第一个块被解压缩,其余的都被丢弃了。 我用pbzip2压缩了很多文件,我希望不改变它们的压缩方式。 对如何解决这个问题有什么建议吗?这甚至可以用于使用pbzip2压缩的文件吗?

  • 问题内容: 这就是问题所在。我有sample.gz文件,大小约为60KB。我想解压缩该文件的前2000个字节。我遇到了CRC检查失败的错误,我猜是因为gzip CRC字段出现在文件末尾,并且它需要整个gzip压缩文件进行解压缩。有办法解决这个问题吗?我不在乎CRC检查。即使由于CRC错误而无法解压缩,也可以。有没有办法解决这个问题并解压缩部分.gz文件? 我到目前为止的代码是 遇到的错误是 还可以

  • 问题内容: 我们如何分别压缩每个文件? 我不想将所有文件都放在一个大的tar中。 问题答案: 您可以使用 注意: 这将分别压缩每个文件并 删除 原始文件。 使用()选项保留原始文件。 如果您由于外壳程序的限制而拥有大量文件,则可能无法使用 要并行运行 gzip 。

  • 本文向大家介绍Android Zip解压缩工具类分享,包括了Android Zip解压缩工具类分享的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android Zip解压缩工具类的具体代码,供大家参考,具体内容如下 添加权限 在具体的场景中测试一下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使

  • 我正在使用lz4压缩并将数据写入hive表,该表有20个文件,每个文件在HDFS上都是15G,并且该表的每个文件名都以lz4结尾,例如,。 当我从这个表中运行select count(1)时,它只启动了20个映射器,这意味着lz4 splittable不能生效。 据说lz4支持针对文本文件的可拆分性,所以我想问一下我应该做什么或其他步骤来实现这一点。