【问题标题】:EOFException: Unexpected end of ZLIB input streamEOFException:ZLIB 输入流的意外结束
【发布时间】:2013-09-16 20:46:51
【问题描述】:

我在解压缩文件并将其写入另一个文件时遇到了这个问题。这是代码。谁能告诉我需要什么更改。

我在while ((len = zis.read(buffer)) > 0) 得到这个异常

private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {

    FileItem fileItem = null;
    byte[] buffer = new byte[1024];

    InputStream inputStream = part.getInputStream();
    ZipInputStream zis = new ZipInputStream(inputStream);

    ZipEntry entry;    
    while ((entry = zis.getNextEntry()) != null) {

        ByteArrayOutputStream fos = new ByteArrayOutputStream();

        int len;
        while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }

        InputStream myByteArray = new ByteArrayInputStream(fos.toByteArray());
        fileItem = createCSVFile(myByteArray, fileName,ImportExportConstant.FILE_TYPE_EXCEL);
    }       

    return fileItem;
}

【问题讨论】:

  • 你能发布堆栈跟踪吗?

标签: java zip


【解决方案1】:

您的代码没有问题。如消息所述,文件有问题。你确定它是压缩的,而不是 GZipped 例如?一个部分被 GZipped 会更常见。试试GZIPInputStream.

NB 不需要ByteArrayInputStream. 这完全是浪费时间和空间。只需将 zip/gzip 输入流直接传递给您的 createCSVFile() 方法即可。

【讨论】:

    【解决方案2】:

    我也有这个错误,我搜索了一下......我读过len = zis.read(buffer)之前必须有zis.closeEntry();,但我试过了,然后错误出现在zis.closeEntry(); 我问了谷歌,这是答案:

    !回答!

    我试着写了一点,然后我把throws IOException换成了try/catch-block,现在一切正常了。 异常是一个众所周知的错误。你必须把所有东西都放在try/catch-block 中,并且什么都不做。

    private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {
    
        FileItem fileItem = null;
        byte[] buffer = new byte[1024];
        try{
            InputStream inputStream = part.getInputStream();
            ZipInputStream zis = new ZipInputStream(inputStream);
    
            ZipEntry entry;    
            while ((entry = zis.getNextEntry()) != null) {
    
                ByteArrayOutputStream fos = new ByteArrayOutputStream();
    
                int len;
                while ((len = zis.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
    
                InputStream myByteArray = new   ByteArrayInputStream(fos.toByteArray());
                fileItem = createCSVFile(myByteArray, fileName,ImportExportConstant.FILE_TYPE_EXCEL);
            }       
        }catch(IOException ex){
            //Do nothing here
        }
        return fileItem;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      相关资源
      最近更新 更多