Android 计算带宽的公式
与带宽计算公式混淆。Android 计算带宽的公式,android,bandwidth,Android,Bandwidth,与带宽计算公式混淆。 关于带宽检测问题,我尝试如下计算带宽 long startTime = System.currentTimeMillis(); HttpResponse response = httpclient.execute(httppost); HttpEntity httpEntity = response.getEntity(); long contentLength = httpEntity.getContentLength(); long endTime = System.c
关于带宽检测问题,我尝试如下计算带宽
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.
我需要的是以位为单位的当前带宽(不是字节或千字节)。我不知道使用上面的公式,如果它是计算带宽字节或位
另外,如果下载时间是0秒,那么带宽应该是多少,即下载内容的长度。
有人能提出正确的计算带宽的公式吗
您可以从服务器下载已知大小的文件
并通过此代码直接获得wifi速度
根据你的评论,你给出了它的//带宽:大小(KB)/时间(s)
,所以只需将它乘以1024
就可以得到字节
,或者1024*8
就可以得到位
,如果下载时间是0,那么从技术上讲就没有下载任何东西,因为速度是amout/time
1.对于以位计算,只需使用
float bandwidth = contentLength / ((endTime-startTime) *(1000*1024*8));
2.如果加载时间为0,则未下载任何内容,因此我们无法建议使用bandwith
编辑2
计算
这只是简单的数学
如果每秒有kb,如1KB/每秒
所以速度是1kbps
=>1*(1024字节)/1*(100000000纳秒)
因此它的0.000001024
字节/纳米级
现在单位为1*(1024*8位)/1*(100000000纳秒)
因此它的0.000008192
位/纳秒
现在,如果您想在seoncds中使用它,只需将它乘以100000000
所以它的0.000008192*100000000=8192位/秒
和
(0.000008192/8)*100000000=1024字节每秒
或1kbps
首先,为了精确起见,您应该使用1000.0
转换为秒,因为您正在将带宽分配给浮点
变量:
float bandwidth = (contentLength / (endTime-startTime)) / 1000.0;
现在,因为contentLength是以字节为单位测量的,所以需要将其转换为位(Kb、Mb等)。每个字节有8位,因此contentLength*8
将字节转换为位
千->兆->千兆->。。。位单位的比例转换顺序为1000
,这意味着将位转换为兆位需要除以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)
编辑#1:如果带宽以字节/时间(例如KB/s)表示,则比例转换的顺序为1024
int bytes = contentLength;
int kilobytes = contentLength / 1024; //Kilobytes
编辑#2:当谈到带宽时,“兆”和“千”等的定义可能有些模糊,我意识到这一点。通常情况下,
1024
(210)和1000
(103)可以互换使用(最有可能发生事故)。在许多情况下,1024
在计算带宽时可能被视为一个数量级,因为计算机上的内存存储空间是在基数2中测量的。然而,网络带宽通常由调节比特传输的CPU的时钟速度控制,该速率以赫兹(准确地说是MHz)为单位测量,其量级为1000
,而不是1024
。然而,在大多数情况下,这两个数字足够接近,不会产生重大错误。这是在这个问题中发布的……好吧,那么为什么((endTime startTime)*1000)
如果我们需要除以秒。如果下载时间是0秒,这意味着下载所花费的时间也是以毫秒为单位的,根据您的计算如果contentLength是51200(50KB),那么我得到的带宽是0。您使用的代码是codeSystem.currentTimeMillis()
。因此,答案是差异(endTime startTime)
仅以毫秒为单位是正确的??。如果您的gettimg time为0,那么您是否检查了日志,是否记录了startTime
和endTime
或是否有0个值??是否记录了开始时间和结束时间,并且我的http请求下载时间不到0秒。因此,使用您的公式,我得到的带宽值为0,内容长度为51200字节。您是否尝试使用nanoTime而不是毫秒long startTime=System.nanoTime()
long endTime=System.nanoTime()-startTime代码>我面临的实际问题是,我想要的是以位为单位的带宽,而不是以字节/MB/KB为单位的带宽。我可以用nano/mills/seconds来计算系统时间,但我一直在用位来计算带宽,但我希望它是位,而不是字节或KB。所以浮动带宽
是否以位为单位?带宽
的测量单位取决于您使用的转换。由于getContentLength()
返回以字节为单位的量,因此必须通过乘以8转换为位。我必须将计算的带宽与一些计算的位进行比较,以检查它是否在该范围内,因此我希望带宽以位为单位。是getContentLength
返回字节数,但我可以将带宽计算转换为位吗?
public static String internetSpeed(long msecs, long bytes)
{
long secs = msecs / 1000;
long bits = bytes * 8;
float speed = bits / secs;
long Kbit = 1024;
long Mbit = Kbit * 1024;
long Gbit = Mbit * 1024;
if (speed < Kbit ) return String.valueOf(speed) + " bit-sec" ;
if (speed > Kbit && speed < Mbit) return String.valueOf(speed / Kbit) + " Kbit-sec";
if (speed > Mbit && speed < Gbit) return String.valueOf(speed / Mbit) + " Mbit-sec";
if (speed > Gbit) return String.valueOf(speed / Gbit) + " Gbit-sec";
return "???";
}
int bytes = contentLength;
int kilobytes = contentLength / 1024; //Kilobytes
public static String internetSpeed(long msecs, long bytes)
{
long secs = msecs / 1000;
long bits = bytes * 8;
float speed = bits / secs;
long Kbit = 1024;
long Mbit = Kbit * 1024;
long Gbit = Mbit * 1024;
if (speed < Kbit ) return String.valueOf(speed) + " bit-sec" ;
if (speed > Kbit && speed < Mbit) return String.valueOf(speed / Kbit) + " Kbit-sec";
if (speed > Mbit && speed < Gbit) return String.valueOf(speed / Mbit) + " Mbit-sec";
if (speed > Gbit) return String.valueOf(speed / Gbit) + " Gbit-sec";
return "???";
}
....
System.out.println(internetSpeed((endTime-startTime), contentLength));
....