使用java优化下载速度

时间:2013-04-24 07:28:39

标签: java performance download

您好我正在使用下载工具,我发现下载速度太低。我检查下载速度看起来很慢。我的代码如下,

        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。

为什么我无法以极快的速度下载?

我的代码有什么问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

你也可以删除你的if(tmpSpeed> 1024 ...并替换为(no'如果这里需要')

double tmpSpeed = speedInBytes / 1024;

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

21057ms
49797 KB/s  >>> 60 KB/s

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