计算带宽的公式

Use*_*337 2 android bandwidth

真的与带宽计算公式混淆.
参考带宽检测问题检查Android中的带宽率我正在尝试计算带宽如下.

long startTime = System.currentTimeMillis();
HttpResponse response = httpclient.execute(httppost);
HttpEntity httpEntity = response.getEntity();
long contentLength = httpEntity.getContentLength();
long endTime = System.currentTimeMillis();
float bandwidth = contentLength / ((endTime-startTime) / 1000); // In the refereed question it is "((endTime-startTime) * 1000)" don't know why multiplication. 
Run Code Online (Sandbox Code Playgroud)

我需要的是当前带宽(不是字节或千字节).如果以字节或位计算带宽,我不知道使用上面的公式.

如果下载时间是0秒,那么带宽应该是下载的内容长度.有人可以建议正确的公式来计算带宽.

Phi*_*hil 5

首先,为了精确起见,您应该使用1000.0转换为秒,因为您要将带宽分配给float变量:

float bandwidth = (contentLength / (endTime-startTime)) / 1000.0;
Run Code Online (Sandbox Code Playgroud)

现在,由于您的contentLength以字节为单位,因此您需要转换为位(Kb,Mb等).每个字节有8位,因此contentLength*8将字节转换为位.

Kilo-> Mega-> Giga - > ...比特单位的比例转换大约是1000指将比特转换为Megabits需要除以1000*1000.所有这些放在一起应该产生:

int bits = contentLength * 8;
int megabits = contentLength / (1000*1000); //Megabits
float seconds = endTime-startTime / 1000.0;
float bandwidth = (megabits / seconds);  //Megabits-per-second (Mbps)
Run Code Online (Sandbox Code Playgroud)

编辑#1:如果带宽以字节/时间计算(例如KB/s),则比例转换大约为1024

int bytes = contentLength;
int kilobytes = contentLength / 1024; //Kilobytes
Run Code Online (Sandbox Code Playgroud)

编辑#2:在谈到带宽时,"Mega"和"Kilo"等的定义可能有些含糊不清.通常1024(2 10)和1000(10 3)可以互换使用(很可能是事故).1024在计算带宽时,许多情况可能是有利的,因为计算机上的存储器存储空间是在基数2中测量的.但是,网络带宽通常由调节位传输的CPU的时钟速度控制,并且这个速率是以赫兹(精确到MHz)为单位测量,其数量级为数量级1000,而不是 1024.但是在大多数情况下,这两个数字足够接近,不会产生明显的错误.