加快下载时间

时间:2010-07-21 19:24:19

标签: android io filereader

我在服务器中有40 MB文件,我正在使用

下载我的文件
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 个答案:

答案 0 :(得分:3)

使用大于1 KB的较大输入缓冲区。清空缓冲区的速度越快,网络堆栈就可以继续下载。这应该有所帮助:

byte[] buffer = new byte[50*1024];

答案 1 :(得分:2)

这个非常丑陋的黑客 可能给你一个更快的下载时间,或者可能没有,你必须在你的条件下测试它:

启动多个并行连接(在单独的线程中?),每个应该下载不同的数据块(使用HTTP 1.1 Range header)。根据许多事情,例如满月,或太阳出来或玫瑰盛开,你可能会得到更好的结果,因为它会比单一连接更好地使你的链接饱和(牺牲其他人共享你的链接,有点像BitTorrent的作用。)

答案 2 :(得分:1)

我遇到了同样的问题,想出了这段代码。比我以前尝试的版本更快。我指定的缓冲区大小大于我要下载的文件。希望它有所帮助。

    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;
}