Я хочу разархивировать 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();
}
Вы не должны доверять 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();
}