使用Java优化下载速度
嗨,我正在使用下载工具,但发现下载速度太慢.我已经检查了下载速度看起来很慢.我的代码如下,

        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的下载速度下载同一文件.

为什么我不能高速下载?

我的代码有什么问题吗?

提前致谢.

最佳答案
即使不进行修改,您的代码运行速度也应比60 KB / s快得多.您可以添加BufferedWriter,但差异可以忽略不计.您使用更快的方法进行复制:使用字节缓冲区进行读/写.使用read()方法(每个字符读取一个字符)时,BufferedReader可以提高速度.但是缓冲区的大小可以改善过程,我使用64 * 1024可以获得很好的效果.

您也可以删除if(tmpSpeed> 1024 …并替换为(此处不需要’if’):

double tmpSpeed = speedInBytes / 1024;

我已经在计算机上从一个HD到另一个对我们的程序进行了测试,并以1GB的文件获得了以下速度:

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

这不是您的代码问题,速度慢来自网络.尝试使用来自不同服务器等的不同文件…

点击查看更多相关文章

转载注明原文:使用Java优化下载速度 - 乐贴网