Android копирует большие входные данные в файл очень медленно - PullRequest
1 голос
/ 01 июня 2011

У меня есть приложение, которое загружает 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, думая, что это может ускорить его, но, похоже, это не имеет значения? Я всегда заканчиваю, и я не получаю ошибок, это просто занимает много времени!

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

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

Бекс

1 Ответ

0 голосов
/ 01 июня 2011

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

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

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();

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

...