EOFException: неожиданный конец входного потока ZLIB

Я столкнулся с этой проблемой при распаковке файла и записи его в другой файл. Вот код. Может кто-нибудь, пожалуйста, дайте мне знать, какие изменения необходимы.

Я получаю это исключение в строке с 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;
}

person Mukesh Pandey    schedule 16.09.2013    source источник
comment
Можете ли вы опубликовать трассировку стека?   -  person Dan W    schedule 17.09.2013


Ответы (2)


В вашем коде нет ничего плохого. Как говорится в сообщении, что-то не так с файлом. Вы уверены, что он заархивирован, а не GZipped, например? Было бы более привычно, если бы часть была заархивирована GZIP. Попробуйте GZIPInputStream.

NB нет необходимости в ByteArrayInputStream. Это пустая трата времени и места. Просто передайте входной поток zip/gzip прямо в ваш метод createCSVFile().

person user207421    schedule 17.09.2013

У меня тоже есть эта ошибка, и я немного искал... Я читал, что должно быть zis.closeEntry(); перед len = zis.read(buffer), но я попробовал, и тогда ошибка появляется в zis.closeEntry(); Я спросил у google, и вот ответ:

!Отвечать!

Попробовал и написал немного, потом поменял 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;
}
person tobiinformatik    schedule 08.04.2015