извлечь большое количество молний

1

У меня большое количество (говорит 1000) застежек с переменным размером (говорит от 4k до 400k), запись для zip. Мне удается распаковать все классическим способом, но производительность на самом деле не удовлетворяет... Знаете ли вы по-другому, 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();
  • 2
    Разместите свой текущий код.
  • 0
    Почему версия InfoZip unzip на вашей платформе не подходит?
Показать ещё 1 комментарий
Теги:
unzip

1 ответ

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

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

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

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

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

Ещё вопросы

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