Разархивируйте данные в байтовом формате

1

Я хочу разархивировать zip файл. У меня есть данные zip как байты. Я использовал приведенный ниже код, чтобы распаковать zip файл. Но я могу читать имена из файлов в zip файле. Но выходные данные повреждены. Я думаю, что читаю все данные в ZipInputStream. Как я могу читать данные каждого файла? Plz помогите мне Спасибо..

ByteArrayInputStream binput = new ByteArrayInputStream(zipeddatainbyte);
    ZipInputStream mzipstream = new ZipInputStream(binput);
    File f2 = new File("/sdcard/Unziped Data/");
    f2.mkdirs();
    ZipEntry entry;
    FileOutputStream out;
    byte[] bout=null;
    try {
        while ((entry = mzipstream.getNextEntry()) != null) {
            System.out.println("entry: " + entry.getName() + ", "
                    + entry.getSize());
            bout=new byte[(int) entry.getSize()];
            mzipstream.read(bout);
            out = new FileOutputStream("/sdcard/Unziped Data/"+entry.getName());
            out.write(bout);
            out.close();



        }
    } catch (IOException e) {

        e.printStackTrace();
    }
Теги:
zip
unzip

1 ответ

2
Лучший ответ

Вы не должны доверять entry.getSize(), но пытайтесь прочитать до конца потока для каждого ZipEntry и контролировать то, что на самом деле читается. Это относится не только к ZipInputStreams, но и к любому Java InputStream. Этот фрагмент извлекается отсюда:

ZipEntry entrada;
while (null != (entrada=zis.getNextEntry()) ){
   System.out.println(entrada.getName());

   FileOutputStream fos = new FileOutputStream(entrada.getName());
   int leido;
   byte [] buffer = new byte[1024];
   while (0<(leido=zis.read(buffer))){
      fos.write(buffer,0,leido);
   }
   fos.close();
   zis.closeEntry();
}
  • 0
    Большое вам спасибо .. Он проснулся ... :) :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню