java压缩文件大小不变_java:Zip Exception无效代码长度?

您正在将新zip文件的ZipEntry设置为与原始文件中的实例相同的实例.这意味着所有值都必须匹配,但是如果写入的条目的压缩大小与源文件的压缩大小不匹配,则失败.原始压缩代码与您现在使用的压缩代码之间的细微差别将产生不同的压缩大小.要使其运行,您必须为输出创建ZipEntry的副本并重置其压缩大小.

顺便说一句,您在代码中使用zin.getNextEntry()和zf.getInputStream(ze),这意味着您正在同时使用ZipFile和ZipInputStream.如果他们引用同一个文件,那将浪费资源,如果他们引用不同的文件,则可能会遇到更多问题.

确定任一ZipFile

ZipFile zf = …

ZipOutputStream zos = …

byte[] buffer = …

for(Enumeration extends ZipEntry> e=zf.entries(); e.hasMoreElements();) {

ZipEntry ze = e.nextElement();

InputStream is = zf.getInputStream(ze);

ZipEntry zeOut=new ZipEntry(ze);

zeOut.setCompressedSize(-1);

zos.putNextEntry(zeOut);

int len;

while ((len = is.read(buffer)) >= 0) {

zos.write(buffer, 0, len);

}

zos.closeEntry();

}

zos.close();

zf.close();

或ZipInputStream

ZipInputStream zin…

ZipOutputStream zos=…

byte[] buffer = …

ZipEntry ze = zin.getNextEntry();

while (ze != null) {

ZipEntry zeOut=new ZipEntry(ze);

zeOut.setCompressedSize(-1);

zos.putNextEntry(zeOut);

int len;

while ((len = zin.read(buffer)) >= 0) {

zos.write(buffer, 0, len);

}

zos.closeEntry();

ze = zin.getNextEntry();

}

zos.close();

zin.close();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值