Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to speed up unzipping time in Java / Android?

Unzipping files on android seems to be dreadfully slow. At first I thought this was just the emulator but it appears to be the same on the phone. I've tried different compression levels, and eventually dropped down to storage mode but it still takes ages.

Anyway, there must be a reason! Does anyone else have this problem? My unzip method looks like this:

public void unzip() { try{         FileInputStream fin = new FileInputStream(zipFile);         ZipInputStream zin = new ZipInputStream(fin);         File rootfolder = new File(directory);         rootfolder.mkdirs();         ZipEntry ze = null;         while ((ze = zin.getNextEntry())!=null){              if(ze.isDirectory()){                 dirChecker(ze.getName());             }             else{                 FileOutputStream fout = new FileOutputStream(directory+ze.getName());              for(int c = zin.read();c!=-1;c=zin.read()){                 fout.write(c);             }                 //Debug.out("Closing streams");                 zin.closeEntry();                 fout.close();          }     }     zin.close(); } catch(Exception e){             //Debug.out("Error trying to unzip file " + zipFile);  }     } 
like image 900
digitalWestie Avatar asked Dec 21 '10 21:12

digitalWestie


1 Answers

I don't know if unzipping on Android is slow, but copying byte for byte in a loop is surely slowing it down even more. Try using BufferedInputStream and BufferedOutputStream - it might be a bit more complicated, but in my experience it is worth it in the end.

BufferedInputStream in = new BufferedInputStream(zin); BufferedOutputStream out = new BufferedOutputStream(fout); 

And then you can write with something like that:

byte b[] = new byte[1024]; int n; while ((n = in.read(b,0,1024)) >= 0) {   out.write(b,0,n); } 
like image 191
Robert Kolner Avatar answered Sep 16 '22 17:09

Robert Kolner