Android копирует большие входные данные в файл очень медленно

1

У меня есть приложение, которое загружает zip файл, а затем копирует этот файл во временный файл на SD-карте на телефоне, но происходит очень медленно.

      InputStream in = new BufferedInputStream(url.openStream(), 1024);
        File tempFile = File.createTempFile("arc", ".zip", targetDir); //target dir is a file
        String tempFilePath = tempFile.getAbsolutePath();
        OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile));

//copying file (in different void)    
        byte[] buffer = new byte[8192];
        int len;
        len = in.read(buffer);
enter code here

//it loops here for AGES
        while (len >= 0) {       
            out.write(buffer, 0, len);
            len = in.read(buffer);
                }
            in.close();
            out.close();

Мой файл составляет около 20 МБ, изначально у меня был размер буфера 1024 и изменил его на 8192, думая, что он может ускорить его, но, похоже, не имеет значения? Я всегда заканчиваю, и я не получаю ошибок, это просто требует возраста!

Я искал, чтобы попытаться найти решение, но я не придумываю ничего, поэтому я, возможно, ошибаюсь по этому пути?

Может ли кто-нибудь увидеть, что я делаю неправильно?

Бекс

  • 0
    Убедитесь, что это не ваше интернет-соединение. Как? Если вы прокомментируете строку «запись», и это не имеет значения ... требуется время, чтобы прочитать ... так что это должно быть соединение.
  • 0
    Я не вижу ничего плохого в вашем коде, поэтому я бы сказал, что он связан с вводом / выводом. Может быть, сервер или SD-карта работают очень медленно? Вы пытались читать без записи или записи фиктивных данных, чтобы увидеть, какая часть является узким местом?
Показать ещё 1 комментарий
Теги:
inputstream

1 ответ

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

Не увеличивайте размер буфера. Это может вызвать ваше приложение MemoryOutOfBoundsException.

Существуют различные факторы, для которых ваша загрузка будет медленной. Слабое подключение к Интернету, также ответственный режим передачи и получения слабых файлов. Это также зависит от емкости устройства. Проверьте, используете ли вы следующий код для создания входного потока

URL u = new URL("enter url url here");
                HttpURLConnection c = (HttpURLConnection) u.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();
                InputStream in = c.getInputStream();

Спасибо Дипак

  • 0
    Это было подключение к интернету!

Ещё вопросы

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