真的搞不懂带宽计算公式。
关于带宽检测问题Check the bandwidth rate in 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. 我需要的是以位为单位的当前带宽(不是字节或千字节)。我不知道上面的公式是用字节还是比特来计算带宽。
另外,如果下载时间是0秒,那么带宽应该是它下载的内容长度。有人可以建议正确的公式来计算带宽的比特。
发布于 2013-03-20 17:03:31
根据你给出的link的评论,它的// Bandwidth : size(KB)/time(s)乘以1024就可以得到bytes或1024*8的bits格式,如果下载时间是0,那么从技术上讲没有任何下载,因为速度是amout/time
1.对于以位为单位的计算,使用
float bandwidth = contentLength / ((endTime-startTime) *(1000*1024*8));2.如果下载时间为0,则没有任何下载,因此我们不能建议带宽
编辑2个
计算
那只是一个简单的数学问题
如果你像1 kb/ per 1 second一样每秒有kb
so speed is 1 kbps => 1*(1024 bytes)/ 1* (1000000000 nano seconds)
因此它每纳秒的0.000001024字节数
现在以位为单位将是1*(1024 * 8 bits)/ 1* (1000000000 nano seconds)
所以它每纳秒的0.000008192位数
现在,如果您想在seoncds中使用它,那么只需将其乘以1000000000即可
所以它的0.000008192 * 1000000000 = 8192 bits per second
和(0.000008192/8) * 1000000000 = 1024 bytes per second或1 kbps
发布于 2014-04-09 19:46:24
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));
....发布于 2013-03-20 17:00:38
您可以从服务器下载已知大小的文件。
long startTime = System.currentTimeMillis();
HttpGet httpRequest = new HttpGet(new URL(urlString).toURI());
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpClient.execute(httpRequest);
long endTime = System.currentTimeMillis();
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity;
bufHttpEntity = new BufferedHttpEntity(entity);
//You can re-check the size of your file
final long contentLength = bufHttpEntity.getContentLength();
// Log
Log.d(TAG, "[BENCHMARK] Dowload time :"+(endTime-startTime)+" ms");
// Bandwidth : size(KB)/time(s)
float bandwidth = contentLength / ((endTime-startTime) *1000);,并通过此代码直接获取wifi速度
WifiManager wifiManager = Context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
Integer linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS
}https://stackoverflow.com/questions/15519015
复制相似问题