问题标签 [gzipinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7677 浏览

java - 数据流 GZIP TextIO ZipException:长度或距离符号过多

对大量压缩文本文件(1000 多个文件,大小在 100MB 和 1.5GB 之间)使用TextIO.Read转换,我们有时会收到以下错误:

在线搜索相同的ZipException,仅导致此回复

当热部署程序在应用程序完全复制到部署目录之前尝试部署应用程序时,通常会发生 Zip 文件错误。如果复制文件需要几秒钟,这很常见。解决方法是将文件复制到与应用服务器相同的磁盘分区上的临时目录,然后将文件移动到部署目录。

有没有其他人遇到过类似的例外?或者无论如何我们可以解决这个问题?

0 投票
1 回答
847 浏览

java - 如何在 Java 中找出损坏的 gz 文件

我必须解压缩使用以下代码的 .gz 文件:

但是,当客户端 gz 文件损坏时,我收到以下错误:

令人惊讶的是,该文件仍在解压缩并存储在本地位置。我根本不希望对损坏的文件进行解压缩或进一步处理。

一种方法是在 catch 子句命中时删除 newFile 对象java.io.EOFException,但这是正确的方法吗?当文件没有损坏时,可能还有其他一些可能的例外。

0 投票
0 回答
943 浏览

java - 错误:不是 GZIP 格式 - 尝试解压缩以前存储在数据库字段中的 GZIP 流

流媒体让我感到困惑 - 就在我认为我掌握了这个想法时,我的代码就崩溃了。

我正在尝试接收一个字符串,gzip 压缩它,并将其存储在 PostGreSQL 数据库中。然后我想把它拿回来并重新转换成输出流。当我尝试将流读入 GZIPstream 时,错误发生在我的“get”函数中。错误是:

java.util.zip.ZipException:不是 GZIP 格式

这是用于压缩字符串然后将其放入数据库的函数:

这是我尝试检索它时的代码(引发错误):

再次,错误“java.util.zip.ZipException: Not in GZIP format”发生在“GZIPInputStream gzipStream = new GZIPInputStream(stream);”行中

哈!我究竟做错了什么?

0 投票
0 回答
1161 浏览

java - 读取 GZIP 压缩输入流时 HTTP 连接关闭

我需要处理大型 gzip 压缩文本文件。

如果我不在循环内进行任何长时间的计算(我必须这样做),则此代码有效。但是只为每行添加几毫秒的睡眠时间会导致程序最终崩溃,并出现 java.util.zip.ZipException。异常的消息每次都不同(“无效的文字/长度代码”、“无效的块类型”、“无效的存储块长度”)。
因此,当我没有足够快地阅读它时,似乎流会损坏。

我可以毫无问题地解压缩文件。我还尝试了来自 Apache Commons Compress 的 GzipCompressorInputStream,结果相同。
这里有什么问题,如何解决?

更新 1

我以为我已经排除了这一点,但做了更多测试,我发现问题仅限于来自互联网的流文件。

完整示例:

有趣的是,当我打印行号时,我发现它总是相同的四五个不同的行之一,我的程序崩溃了。


更新 2

这是一个包含实际文件的完整示例:

对于这个文件,崩溃出现在第 90000 行附近

。为了排除超时问题,我尝试过connection.setReadTimeout(0)- 没有效果。

应该是网络问题。但是因为我可以在浏览器中下载文件,所以必须有一种方法来处理它。

更新 3

我尝试使用 Apache HttpClient 进行连接。

现在我得到了以下异常,这可能更有帮助。

同样,必须有一种方法来处理这个问题,因为我可以在浏览器中下载文件并解压缩它而没有任何问题。

0 投票
0 回答
4712 浏览

java - 面对 java.util.zip.ZipException:无效位长度重复

我有大型 Base64 编码的 Gzipped 数据存储在 tomcat 临时文件夹中的 .tmp 文件中。该数据最初是 gzip 压缩的文本数据。我需要能够读取这些编码数据的块,对其进行解码,然后使用 GZIPInputStream 将其解压缩。但是我在 zis.read(decodedChunk) 得到了这个 ZipException: invalid bit length repeat 异常。我正在使用来自 apache-commons-codec 1.10 的 Base64InputStream。请分享您的专家建议以解决此问题。

错误堆栈跟踪——

FailedToInvokeService - 失败。

0 投票
0 回答
950 浏览

java - 如何从 JNLP 文件下载库

我正在尝试从 Java 程序加载特定的 JNLP 文件并获取其 .jar 文件。我已经下载了 .pack.gz 文件(因为它使用压缩),但现在我无法解压缩它们。我正在尝试使用 java.util.jar.Pack200.Unpacker 类,但它会引发异常,并包含以下信息:

我已经找到了那个错误,然后我尝试使用命令“unpack200”解压文件并且它可以工作。然后我尝试在openjdk项目中找到unpack200的源码,但是没有找到。那么,谁能告诉我在哪里可以找到这些资源以了解如何使用 Unpacker 类?我附上了我正在使用的代码:

异常之前的输出是这样的:

提前致谢。

编辑:感谢@Thorbjoern 的评论,我已经解决了。我只需要解压缩文件然后解压缩它们。文件代码如下所示:

0 投票
0 回答
657 浏览

java - 套接字异常 - 连接重置 - 无法复制

更新我发现这个错误与 GZIP 流有关。如果我删除它们并只使用对象流而不是用对象流包装的 GZIP,那么我的问题就解决了,没有例外。我不知道为什么会这样,如果有人可以提供帮助,那就太好了。

我还注意到,在使用 GZIP 时,错误是非常随机的。例如,它似乎很大程度上取决于我通过套接字发送的对象中的数据。更改对象数据,有时可以解决问题。例如,我有一个包含字符串值的用户对象,例如名字、姓氏、电话号码。如果它们都设置好了,我会遇到以下问题,但是如果我将它们全部清除为空字符串值,那么我不会得到以下异常。老实说这很奇怪

我有一个客户端/服务器套接字,它通过 GZIP 流发送对象。这在过去没有问题。但是,现在我在将某些数据从服务器发送回客户端时看到连接重置。

客户端连接到服务器并发送请求,服务器将回复并发送回一些数据。我相信错误来自服务器,因为连接重置异常出现在客户端。

这是异常的片段

这是一个非常奇怪的问题,因为所有客户端/服务器通信都使用相同的套接字实现,并且在我们的测试环境中一切正常。当客户端在启动时加载应用程序时,在异常发生之前从服务器收集一些数据也成功使用了相同的代码。

上述信息使我相信正在传递的特定数据可能存在问题,尽管客户端和服务器除了连接重置之外都没有异常。

在调试时查看 netstat ( netstat -anp ),我可以看到成功的操作导致套接字处于“CLOSE_WAIT”状态,但是不成功的操作套接字似乎一起消失了,它在任何状态下都不存在。我还注意到,连接完成时会有很多 RST,即使在我没有收到连接重置异常的成功情况下也是如此。我的 TCP 知识不是很好,但我原以为干净的连接会以 FIN 结束而不是 RST?

这是代码示例

客户:

服务器此时已经读取了“请求”,因此这只是将请求的数据返回给客户端的部分。服务器:

在调试日志记录时,服务器一直运行到完成,没有任何异常(因此“<运行”写入日志)。但是客户端错误

ois = new ObjectInputStream(gZipIn);

另一个值得注意的项目是发生异常的实时系统正在运行 linux ( Centos ),因为我无法在 Windows 上复制异常,并且它也不会在 Linux Mint 上发生。我不认为这会是原因,但只是想我应该提一下。

任何帮助都非常感谢,因为我对这里问题的原因感到迷茫。

0 投票
0 回答
398 浏览

java - Java 的 GZipInputStream 线程安全吗?

我有许多 gzipped 文件,其中包含我试图将它们排序到单个合并文件中的记录。CPU 能力不是限制。

我想根据需要启动从 GZipInputStreams 读取的线程。在任何给定时间将从每个文件读取的数量是可变的且不可预测的。解决这个问题最明显的方法是有一个线程池,如果后备缓冲区低于低水位线,则提交任务以从 GZipInputStream 读取。

我担心从不同线程读取单个 GZipInputStream 可能会出现内存障碍问题,因为可能假设数据只会从一个线程消耗。

需要明确的是,我并不是建议多个线程同时从同一个 GZipInputStream 读取,而是如果从一个线程读取流然后立即从另一个线程读取,则缺少同步监视器可能会导致某些数据不一致.

0 投票
2 回答
6352 浏览

java - java.io.EOFException:读取 gzip 编码网站的 ZLIB 输入流意外结束

我在压缩某些网站时遇到问题。以下代码应该可以正常工作,但会抛出EOFException. 所有主流浏览器都可以加载该站点,我也可以使用 curl 和 gzip。

这将是输出:

这不是我在 gzip 编码方面遇到问题的唯一网站。我也有问题

  • 央视网
  • yxdown.com
  • 天气网
  • 易奔网

难道我做错了什么?

我的系统是 Win7 x64,Java 8 Update 102。

提前致谢!

编辑:我可以自己读取流并吞下异常,但在异常发生的那一刻,我可能会丢失bufferSize字节并且有一个损坏/不完整的文档。有没有办法解决这个问题(将bufferSize设置为 1 除外)?

编辑2:作为一种在异常发生之前获取字节的解决方法,例如可以像这样读取流:

但这里的问题是,如何选择bufferSize?例如,当它设置为 1000 并且在某些时候,例如在读取当前 1000 个字节中的最后一个时发生异常,我将丢失之前正确读取的所有 999 个字节。完整性的完美值是 1,但这非常慢。

那么,如何在不损失性能的情况下获得所有正确的可读数据呢?

0 投票
2 回答
996 浏览

java - 如何 gzip 一个 InputStream 并返回一个 InputStream?

我从 HTTP 请求的响应开始:

我需要对该响应进行 gzip 压缩,以便将其上传到 s3 并将其压缩保存:

我知道我可以将byte[]数组取出,responseInputStream然后将它们压缩成一个新的InputStream. 但是,对于大量数据,这可能非常低效。

我知道在 SO 上也有人问过类似的问题,但我还没有找到任何似乎可以解决从 a 开始InputStream并以 gzipped 结束的特定需求InputStream

谢谢你的帮助!