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

        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到另一个HD测试了我们的程序,并以1GB的文件获得了以下速度:
21057ms
49797 KB/s  >>> 60 KB/s

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

关于java - 使用Java优化下载速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16185949/

10-11 22:23
查看更多