java 预览zip_java – 从ZipInputStream读入ByteArrayOutputStream

你的循环看起来很有效 – 下面的代码(就是它自己的)返回什么?

zipStream.read(tempBuffer)

如果它返回-1,那么zipStream在你得到之前是关闭的,所有的赌注都是关闭的.现在是时候使用你的调试器,并确保传递给你的是真的有效.

当您调用getNextEntry()时,它是否返回一个值,并且该条目中的数据有意义(即getCompressedSize()是否返回有效值)?如果您正在阅读一个Zip文件,该文件没有嵌入预览的zip文件,那么ZipInputStream将无法为您服务.

有关Zip格式的一些有用的信息:

嵌入在zip文件中的每个文件都有一个标题.此标题可以包含有用的信息(例如流的压缩长度,它在文件中的偏移量,CRC) – 或者它可以包含一些基本上称为“信息不在流标题中的魔术值,您必须检查邮编后缀“.

每个zip文件都有一个附加到包含所有zip条目的文件末尾的表以及实际数据.最后的表格是强制性的,其中的值必须正确.相反,不需要提供嵌入流中的值.

如果您使用ZipFile,它会在zip的末尾读取表格.如果您使用ZipInputStream,我怀疑getNextEntry()尝试使用嵌入在流中的条目.如果没有指定这些值,则ZipInputStream不知道流可能有多长.膨胀算法是自我终止的(您实际上不需要知道输出流的未压缩长度才能完全恢复输出),但是这个读者的Java版本可能不会很好地处理这种情况.

我会说,有一个servlet返回一个ZipInputStream是相当不寻常的(如果你要接收压缩的内容,它是更常见的接收一个inflatorInputStream.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值