我正在创建一个程序,它将解压缩一个zip,然后将文件插入到数据库中,每隔一段时间我就会得到错误
java.lang.Exception: java.io.EOFException: Unexpected end of ZLIB input stream
我不能找出原因,因为提取代码是几乎相同的所有其他代码,你可以在网上找到。我的代码如下:
public void extract(String zipName, InputStream content) throws Exception {
int BUFFER = 2048;
//create the zipinputstream
ZipInputStream zis = new ZipInputStream(content);
//Get the name of the zip
String containerName = zipName;
//container for the zip entry
ZipEntry entry;
// Process each entry
while ((entry = zis.getNextEntry()) != null) {
//get the entry file name
String currentEntry = entry.getName();
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// establish buffer for writing file
byte data[] = new byte[BUFFER];
int currentByte;
// read and write until last byte is encountered
while ((currentByte = zis.read(data, 0, BUFFER)) != -1) {
baos.write(data, 0, currentByte);
}
baos.flush(); //flush the buffer
//this method inserts the file into the database
insertZipEntry(baos.toByteArray());
baos.close();
}
catch (Exception e) {
System.out.println("ERROR WITHIN ZIP " + containerName);
}
}
}
4条答案
按热度按时间ki0zmccv1#
这可能是由于JVM bug (JVM-6519463)
我以前在1000个随机创建的文档上有一两个错误,我应用了建议的解决方案(捕获EOFException,不做任何操作),没有更多的错误。
idv4meu82#
我会说你偶尔会被截断的Zip文件处理。检查上游。
to94eoyn3#
我遇到了同样的异常,问题出在压缩方法(不是提取)上。在写入输出流后,我没有使用
zos.closeEntry()
关闭ZipOutputStream。如果没有zos.closeEntry()
,压缩工作正常,但在提取时出现了异常。zdwk9cvp4#
不要尝试读取超过条目所包含的字节数。调用ZipEntry.getSize()来获取条目的实际大小,然后使用此值来跟踪条目中剩余的字节数,同时阅读条目。请参阅以下内容: