Java-Zip输出流动态缓冲区大小
我正在开发一个应用程序,该应用程序从一个zip文件中获取文件并将其放入另一个zip文件中,但如果源zip中有dir,则会失败,出现以下异常:Java-Zip输出流动态缓冲区大小,java,zip,zipinputstream,zipoutputstream,Java,Zip,Zipinputstream,Zipoutputstream,我正在开发一个应用程序,该应用程序从一个zip文件中获取文件并将其放入另一个zip文件中,但如果源zip中有dir,则会失败,出现以下异常: 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
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();
}
我尝试过不同的缓冲区大小,但没有帮助,我需要一种方法来获得动态缓冲区大小。
欢迎提供示例和链接
编辑:我更改了代码以使其可用
- 利亚姆,首席执行官
- 移动
zos.closeEntry();
在最内部循环之外,否则假设每个条目的长度不超过1024字节
我想你的目录是第一个达到这个大小的条目
顺便说一句,你也可以移动
byte[] buffer = new byte[1024];
到外部循环之前,以便只创建一次。哪一行有异常?顺便说一句:我也会在com.hachisoftware.mmi.system.util.ZipExtractToZip(util.java:26)的java.util.zip.zipoutptstream.closeEntry(未知源代码)上使用BufferedInputSTream(不是说它会解决问题),谢谢你,这很有效,我得到了一点压缩(1kb),但也没问题,如果你这样做,你只需要创建一次缓冲区,在外部循环之外。如果我要降低缓冲区大小,压缩zip会更多吗?流有自己的缓冲区,默认情况下是512字节。它不应该对压缩比有任何影响,只会影响性能。对于普通的磁盘流,8K-64K的缓冲区会稍微快一点,但是在您的情况下,我怀疑这是否重要(因为压缩/解压缩是最昂贵的)