В настоящее время я пишу приложение, которое читает zip-файл в моей папке ресурсов, который содержит кучу изображений.Я использую ZipInputStream
API для чтения содержимого, а затем записываю каждый файл в мой каталог: Environment.getExternalStorageDirectory()
.У меня все работает, но при первом запуске приложения запись изображений в каталог хранилища невероятно медленная.Запись моих изображений на диск занимает около 5 минут.Мой код выглядит так:
ZipEntry ze = null;
ZipInputStream zin = new ZipInputStream(getAssets().open("myFile.zip"));
String location = getExternalStorageDirectory().getAbsolutePath() + "/test/images/";
//Loop through the zip file
while ((ze = zin.getNextEntry()) != null) {
File f = new File(location + ze.getName());
//Doesn't exist? Create to avoid FileNotFoundException
if(f.exists()) {
f.createNewFile();
}
FileOutputStream fout = new FileOutputStream(f);
//Read contents and then write to file
for (c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
}
fout.close();
zin.close();
Процесс чтения содержимого определенной записи и последующей записи в нее ОЧЕНЬ медленный.Я предполагаю, что это больше связано с чтением, чем письмом.Я читал, что вы можете использовать буфер массива byte[]
для ускорения процесса, но это, похоже, не работает!Я пробовал это, но он только читает часть файла ...
FileOutputStream fout = new FileOutputStream(f);
byte[] buffer = new byte[(int)ze.getSize()];
//Read contents and then write to file
for (c = zin.read(buffer); c != -1; c = zin.read(buffer)) {
fout.write(c);
}
}
Когда я делаю это, я получаю только около 600-800 байт.Есть ли способ ускорить это?Я неправильно реализовал буферный массив ??