爪哇 - ZIP输出流动态缓冲区大小
我工作的应用程序,它从一个压缩文件需要,并把它们在其他,它的罚款文件,但如果没有在源目录ZIP它失败,出现以下异常:爪哇 - ZIP输出流动态缓冲区大小
Exception in thread "main" java.util.zip.ZipException: invalid entry size (expected 1374 but got 1024 bytes)
我用下面的代码:
public static void ZipExtractToZip(File inZip, File outZip) throws IOException
{
ZipInputStream zis = new ZipInputStream(new FileInputStream(inZip));
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(outZip)));
byte[] buffer = new byte[1024];
for (ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry())
{
zos.putNextEntry(ze);
for (int read = zis.read(buffer); read != -1; read = zis.read(buffer)) {
zos.write(buffer, 0, read);
}
zos.closeEntry();
}
zos.close();
zis.close();
}
我已经尝试了不同的缓冲区大小,但这样做没有帮助,我需要一种方式来获得一个动态的缓冲区大小。 欢迎举例和链接。
编辑:我改变了代码,使其可用
- 利亚姆,Hachi Software CEO
移动
zos.closeEntry();
最内层循环外,否则我们假定你是每个条目不超过1024个字节长。
我猜你的目录是第一个这样大小的条目。
顺便说一句,您还可以在外环之前移动
byte[] buffer = new byte[1024];
如此它仅创建一次。
我会尝试一下 – 2012-01-10 10:59:28
谢谢,这个工作,我得到了一点压缩(1kb),但多数民众赞成 – 2012-01-10 11:01:32
此外,如果你这样做,你只需要创建一次,在外部循环外的缓冲区。 – sje397 2012-01-10 11:03:07
哪条线有例外?顺便说一句:我也会使用BufferedInputSTream(不是它可以解决问题) – 2012-01-10 10:49:44
at java.util.zip.ZipOutputStream.closeEntry(Unknown Source) \t at com.hachisoftware.mmi.system.Util.ZipExtractToZip(Util。 java:26) – 2012-01-10 10:53:09