извлечь большое количество молний - PullRequest
1 голос
/ 03 июля 2011

Я имею большое количество (говорит 1000) почтовых индексов переменного размера (скажем, от 4k до 400k), запись для почтового индекса.Мне удается распаковать все классическим способом, но производительность на самом деле не удовлетворяет ... Знаете ли вы другой способ, основанный на nio или native, который может помочь улучшить производительность?

заранее спасибо.

извините .. я забыл написать код :)

    zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(f)));
            while ((zentry = zis.getNextEntry()) != null) {
                zentryName = zentry.getName();
                File unzippedFile = new File(staging, zentryName);
                BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(unzippedFile));
                byte buffer[] = new byte[32768];
                while ((read = zis.read(buffer, 0, 32768)) > 0) {
                    fos.write(buffer, 0, read);
                }


                f.delete();
                fos.flush();
                fos.close();
                zis.closeEntry();
            }


            zis.close();

1 Ответ

2 голосов
/ 03 июля 2011

Ваш код выглядит хорошо ....

Распаковка на андроид будет медленной.Это и относительно низкая скорость процессора (для такого рода операций ARM наверняка хуже, чем у x86) и скорость интерфейса SD-карты (помните, что вы одновременно читаете .zip и записываете разархивированные данные, используя одну и ту же относительно низкую скорость файловой системы) -несжатые данные могут быть в несколько раз больше, чем сжатые, поэтому речь идет о довольно большом количестве записей.

Есть несколько вещей, которые можно сделать, чтобы обойти это:

  • выполнять потоковую обработку, если это возможно - в некоторых редких случаях это может оказаться быстрее, чем разархивировать весь файл заранее (например, если вы хотите получить доступ только к нескольким файлам из zip-файла)
  • распакуйте файлы по мере необходимости - ленивый, на заднем плане ... обычно - вы можете дать пользователю несколько визуальных отзывов и позволить ейделать какие-то вещи, пока ваши архивы не сжимаются в фоновом режиме (не забывайте отдавать низкий приоритет потокам и, возможно, делать паузы каждый сейчас и потом)
...