虽然设置了ZipEntry未知的大小

时间:2014-09-01 09:09:21

标签: java zip size

我搜索并阅读了有关ZipEntry(JAVA 7)的所有问题,但我的问题无处可寻:

我在JAVA中成功压缩和解压缩文件,但是在zip时,我将未压缩的大小设置为ZipEntry.setSize(long),其值肯定小于int值, 回读,在解压缩时,ZipEntry.getSize()总是返回-1。 虽然我的程序运行良好,但验证部分会警告unknown size

如何设置未压缩的大小?

3 个答案:

答案 0 :(得分:2)

似乎JAVA中存在一个错误: https://community.oracle.com/thread/2073587?start=0&tstart=0

目前我找不到任何解决方案或修补方法。 可能ORACLE认为:解压缩有效,所以不要管它。 问候。 ;!JOOP

答案 1 :(得分:1)

乍一看,它看起来像一个错误,但正如here解释的那样,它实际上并非如此!

大小信息(以及CRC之类的其他信息)以压缩方式存储,以便访问您必须访问的信息:

  1. 首先致电getNextEntry()以获取第一个条目
  2. 现在调用getSize()将返回-1
  3. 通过调用read(buffer)
  4. 读取文件数据
  5. 再次致电getNextEntry()
  6. 此时,在第一个条目中调用getSize()现在将返回正确的大小!
  7. 很奇怪,但这显然应该如何运作

答案 2 :(得分:-1)

发布一些压缩代码。在将其添加到zip存档/流之前,您应ZipEntry.setSize(long)