首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带宽计算公式

带宽计算公式
EN

Stack Overflow用户
提问于 2013-03-20 16:55:47
回答 3查看 7.5K关注 0票数 2

真的搞不懂带宽计算公式。

关于带宽检测问题Check the bandwidth rate in Android,我尝试计算带宽,如下所示。

代码语言:javascript
复制
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秒,那么带宽应该是它下载的内容长度。有人可以建议正确的公式来计算带宽的比特。

EN

回答 3

Stack Overflow用户

发布于 2013-03-20 17:03:31

根据你给出的link的评论,它的// Bandwidth : size(KB)/time(s)乘以1024就可以得到bytes1024*8bits格式,如果下载时间是0,那么从技术上讲没有任何下载,因为速度是amout/time

1.对于以位为单位的计算,使用

代码语言:javascript
复制
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 second1 kbps

票数 3
EN

Stack Overflow用户

发布于 2014-04-09 19:46:24

代码语言:javascript
复制
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 "???";
}

您可以像这样调用此方法

代码语言:javascript
复制
....
System.out.println(internetSpeed((endTime-startTime), contentLength));
....
票数 3
EN

Stack Overflow用户

发布于 2013-03-20 17:00:38

您可以从服务器下载已知大小的文件。

代码语言:javascript
复制
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速度

代码语言:javascript
复制
WifiManager wifiManager = Context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
    Integer linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15519015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档