首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用java优化下载速度

使用java优化下载速度
EN

Stack Overflow用户
提问于 2013-04-24 15:28:39
回答 1查看 2.2K关注 0票数 3

嗨,我正在开发一个下载工具,我发现下载速度太慢了。我检查过下载速度看起来很慢。我的代码如下:

代码语言:javascript
运行
复制
        float fileSize = Float.parseFloat(uc.getHeaderField("Content-Length"));

        in = new BufferedInputStream(uc.getInputStream());

        System.out.println("File size : " + fileSize);


        fout = new FileOutputStream(settingsForm.downloadDirectoryText.getText() + File.separatorChar + fileName);
        int BUFFER_SIZE = 10240;
        byte data[] = new byte[BUFFER_SIZE];
        int count = 0;
        int totalDownloaded = 0;

        long downloadStartTime = System.currentTimeMillis();
        long remainingTime = 0;



        while ((count = in.read(data, 0, BUFFER_SIZE)) != -1) {

            totalDownloaded += count;
            long elapsedTime = System.currentTimeMillis() - downloadStartTime;

            float speedInBytes = 1000f * totalDownloaded / elapsedTime;
            float tmpSpeed = speedInBytes;
            if (tmpSpeed > 1024) {
                tmpSpeed = tmpSpeed / 1024;
            }
            if (tmpSpeed > 1024 * 1024) {
                tmpSpeed = tmpSpeed / (1024 * 1024);
            }
            System.out.println("Speed : " + tmpSpeed);
            System.out.println("Remaining Time : " + (fileSize - totalDownloaded) / speedInBytes + " seconds");
            int downloadPercentage = (int) ((totalDownloaded / fileSize) * 100);

            fout.write(data, 0, count);
        } 

我发现下载耗时90秒,平均下载速度为60-70kbps。

我已经给了一个Free Download Manager的下载链接,它可以在10秒内下载相同的文件。可以下载相同的文件,下载速度超过400kpbs。

为什么我不能以这么快的速度下载?

我的代码中有什么错误吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 16:29:18

即使没有修改,你的代码运行速度也应该比60KB/s快很多,你可以添加一个BufferedWriter,但是差别可以忽略不计。您可以使用更快的方法进行复制:使用字节缓冲区进行读/写。BufferedReader在使用read()方法(读取每个字符的字符)时可以提高速度。然而,缓冲区的大小可以改善进程,我使用64 * 1024得到了很好的结果。

您还可以删除if (tmpSpeed >1024...并替换为(此处不需要'if‘):

代码语言:javascript
运行
复制
double tmpSpeed = speedInBytes / 1024;

我已经在我的机器上从一个硬盘到另一个硬盘测试了我们的程序,我用一个1 1GB的文件获得了以下速度:

代码语言:javascript
运行
复制
21057ms
49797 KB/s  >>> 60 KB/s

这不是你的代码的问题,缓慢来自网络。尝试使用来自不同服务器的不同文件,等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16185949

复制
相关文章

相似问题

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