使用ZipInputStream和缓冲输出流对zip文件解压处理报错---java.io.EOFException: Unexpected end of ZLIB input stream

tech2025-10-30  1

错误描述

java.io.EOFException: Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at java.util.zip.ZipInputStream.read(ZipInputStream.java:194) at java.io.FilterInputStream.read(FilterInputStream.java:107) at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792) at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) 使用ZipInputStream和缓冲输出流对zip文件解压处理报错

错误产生的代码

try (FileOutputStream outputStream = new new FileOutputStream(filePath)) { IOUtils.copy(zipInputStream, outputStream); outputStream.flush(); } zipInputStream.closeEntry();

解决方法–修改代码如下

try (FileOutputStream outputStream = new FileOutputStream(filePath)) { int n = 0; byte[] buffer = new byte[512]; try { while (-1 != (n = zipInputStream.read(buffer))) { outputStream.write(buffer, 0, n); } } catch (IOException e) { log.error("unZipFileIOException:", e); } zipInputStream.closeEntry(); } //数组的长度写的是512,ZipInputStream初始化的时候初始化PushbackInputStream的字节长度也是512 public ZipInputStream(InputStream in, Charset charset) { super(new PushbackInputStream(in, 512), new Inflater(true), 512); usesDefaultInflater = true; if(in == null) { throw new NullPointerException("in is null"); } if (charset == null) throw new NullPointerException("charset is null"); this.zc = ZipCoder.get(charset); }
最新回复(0)