首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加快下载速度

加快下载速度
EN

Stack Overflow用户
提问于 2010-07-22 03:24:19
回答 2查看 4.6K关注 0票数 5

我在服务器上有40 MB的文件,我正在下载我的文件使用

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2010-07-22 05:03:44

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

代码语言:javascript
复制
byte[] buffer = new byte[50*1024];
票数 3
EN

Stack Overflow用户

发布于 2010-07-22 12:00:57

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

代码语言:javascript
复制
    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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3302993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档