java - 计算网络下载速度

标签 java networking download

我编写了以下代码来使用java计算下载速度。 但它没有给出正确的结果。问题是什么?。我的逻辑有问题吗?还是java网络类的使用有问题?我认为这是java网络类的使用问题。有人能告诉我吗?我到底是什么问题?

/*Author:Jinu Joseph Daniel*/
import java.io.*;
import java.net.*;
class bwCalc {
    static class CalculateBw {
            public void calculateUploadBw() {}
            public float calculateDownloadRate(int waitTime) throws Exception {
               int bufferSize = 1;
               byte[] data = new byte[bufferSize]; // buffer
               BufferedInputStream in = new BufferedInputStream(new URL("https://www.google.co.in/").openStream());
               int count = 0;
               long startedAt = System.currentTimeMillis();
               long stoppedAt;
               float rate;
                while (((stoppedAt = System.currentTimeMillis()) - startedAt) < waitTime) {
                    if ( in .read(data, 0, bufferSize) != -1) {
                    count++;
                } else {
                    System.out.println("Finished");
                    break;
                }
            }
            in .close();
            rate = 1000 * (((float) count*bufferSize*8 / (stoppedAt - startedAt)) )/(1024*1024);//rate in Mbps
            return rate;
        }
    public float calculateAverageDownloadRate() throws Exception{
        int times[] = {100,200,300,400,500};
        float bw = 0,curBw;
        int i = 0, len = times.length;
        while (i < len) {
            curBw = calculateDownloadRate(times[i++]);
            bw += curBw;
            System.out.println("Current rate : "+Float.toString(curBw));
        }
        bw /= len;
        return bw;
    }
}
public static void main(String argc[]) throws Exception {
    CalculateBw c = new CalculateBw();
    System.out.println(Float.toString(c.calculateAverageDownloadRate()));
}
}

最佳答案

您的代码存在很多问题...

  • 您没有检查正在读取的字节数
  • 使用 Google 主页进行测试是没有用的,因为内容非常小,而且大部分下载时间与网络延迟有关;您应该尝试下载一个大文件(10+ MB) - 除非您实际上想要测量延迟而不是带宽,在这种情况下您只需运行 ping
  • 如果您想获得任何相关结果,您还需要给它超过 500 毫秒 - 我认为至少 5 秒
  • 存在大量代码风格问题,但这些问题不太重要

关于java - 计算网络下载速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039660/

相关文章:

android - 我的 Android 应用程序上的 VOIP

Java - 使用按钮和鼠标单击创建自定义事件

java - 如何为框架设置彩色背景?

python - 来自 socket() 的 UDP 数据包 header 与预期不符

java - 使用 Gmail 服务器下载电子邮件, 'Authentication Failed'

r - R Shiny-将csv下载到工作目录

javascript - AngularJS,管理二进制数据

java - 下面的java代码有什么问题吗?

java - BufferedImage 减小图像大小

android - 设备之间的Android套接字