Ускорить время загрузки - PullRequest
5 голосов
/ 21 июля 2010

У меня 40 МБ файла на сервере, и я загружаю файл, используя

HttpURLConnection c = (HttpURLConnection) u.openConnection();
 c.setRequestMethod("GET");
 c.setDoOutput(true);
 c.connect();
 FileOutputStream f = new FileOutputStream(new File("trips.xml"));


 InputStream in = c.getInputStream();

 byte[] buffer = new byte[1024];
 int len1 = 0;
 while ( (len1 = in.read(buffer)) != -1 ) {
  f.write(buffer,0, len1);

этот код работает нормально, но он занимает слишком много времени. В любом случае, я могу сделать этот процесс быстрее.

/ minhaz

Ответы [ 3 ]

3 голосов
/ 22 июля 2010

Использовать больший входной буфер, чем 1 КБ. Чем быстрее вы очистите буфер, тем быстрее будет загружаться сетевой стек. Это должно помочь:

byte[] buffer = new byte[50*1024];
2 голосов
/ 22 июля 2010

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) * * * * * * * * *1004* * * * * * * * * * *1004*.1006 * Запустите несколько параллельных соединений (в отдельных потоках?), И каждое из них должно загрузить разные порции данных (используя HTTP 1.1 заголовок диапазона ).В зависимости от многих вещей, таких как, если полная луна, или солнце отсутствует, или розы цветут, вы можете получить лучшие результаты, потому что это насытит вашу ссылку лучше, чем одно соединение (за счет того, что все остальные делятся вашей ссылкой, вроде какчто делает BitTorrent).

1 голос
/ 22 июля 2010

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

    public String load(String url, int bufferSize){

    try {
        URL myURL = new URL(url);
        URLConnection ucon = myURL.openConnection();
        ucon.setRequestProperty("Connection", "keep-alive");
        InputStream inputStream = ucon.getInputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        ByteArrayBuffer byteArrayBuffer = new ByteArrayBuffer(bufferSize);
        byte[] buf = new byte[bufferSize];
        int read;
        do {
            read = bufferedInputStream.read(buf, 0, buf.length);
            if (read > 0)
                byteArrayBuffer.append(buf, 0, read);
        } while (read >= 0);
        return new String(byteArrayBuffer.toByteArray());
    } catch (Exception e) {
        Log.i("Error", e.toString());
    }
    return null;
}
...