小编Jef*_*ell的帖子

解压缩HTTPInputStream时GZIPInputStream过早关闭

在下面的“编辑”部分中查看更新的问题

我正在尝试使用GZIPInputStream从Amazon S3快速解压缩大的(〜300M)GZIP文件,但它仅输出文件的一部分;但是,如果我在解压缩之前下载到文件系统,则GZIPInputStream将解压缩整个文件。

如何获得GZIPInputStream解压缩整个HTTPInputStream而不只是它的第一部分?

我尝试过的

请参阅下面的编辑部分中的更新

我怀疑有一个HTTP问题,只是没有抛出任何异常,GZIPInputStream每次都返回一个相当一致的文件块,据我所知,它总是在WET记录边界上中断,尽管每个选择的边界都是不同的URL(这很奇怪,因为所有内容都被视为二进制流,根本没有对文件中的WET记录进行任何解析。)

我可以找到的最接近的问题 是,从s3读取时GZIPInputStream被过早关闭。该问题的答案是,某些GZIP文件实际上是多个附加的GZIP文件,而GZIPInputStream处理得不好。但是,如果是这种情况,为什么GZIPInputStream在文件的本地副本上可以正常工作?

演示代码和输出

下面是一段示例代码,演示了我所遇到的问题。我已经在两个不同网络上的两台不同Linux计算机上使用Java 1.8.0_72和1.8.0_112对它进行了测试,结果相似。我希望来自解压缩的HTTPInputStream的字节数与来自文件的解压缩的本地副本的字节数相同,但是经过解压缩的HTTPInputStream小得多。

输出量
Testing URL https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2016-50/segments/1480698540409.8/wet/CC-MAIN-20161202170900-00009-ip-10-31-129-80.ec2.internal.warc.wet.gz
Testing HTTP Input Stream direct to GZIPInputStream
Testing saving to file before decompression
Read 87894 bytes from HTTP->GZIP
Read 448974935 bytes from HTTP->file->GZIP
Output from HTTP->GZIP saved to file testfile0.wet
------
Testing URL https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2016-50/segments/1480698540409.8/wet/CC-MAIN-20161202170900-00040-ip-10-31-129-80.ec2.internal.warc.wet.gz
Testing HTTP Input Stream direct to GZIPInputStream
Testing saving to file before decompression
Read 1772936 bytes from HTTP->GZIP
Read 451171329 bytes from HTTP->file->GZIP
Output from HTTP->GZIP saved to …
Run Code Online (Sandbox Code Playgroud)

java amazon-s3 gzipinputstream

4
推荐指数
1
解决办法
547
查看次数

标签 统计

amazon-s3 ×1

gzipinputstream ×1

java ×1