gpt4 book ai didi

android - 计算带宽的公式

转载 作者:太空狗 更新时间:2023-10-29 15:36:40 28 4
gpt4 key购买 nike

带宽计算公式真糊涂。
引用带宽检测问题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 秒,那么带宽应该是多少,即下载的内容长度。有人可以建议正确的公式来计算带宽(以位为单位)。

最佳答案

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

float bandwidth = (contentLength / (endTime-startTime)) / 1000.0;

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

Kilo->Mega->Giga ->... 位单位的比例转换是 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: 我意识到,在谈论带宽时,“Mega”和“Kilo”等的定义可能有些含糊不清。通常 1024 (210) 和 1000 (103) 可以互换使用(很可能是意外).在许多情况下,1024 在计算带宽时可能更适合作为数量级,因为计算机上的内存存储空间是以 2 为底数测量的。但是,网络带宽通常由 CPU 的时钟速度控制,CPU 的时钟速度调节位的传输,此速率以赫兹(准确地说是 MHz)为单位测量,其数量级为 1000不是 1024 .然而,在大多数情况下,这两个数字非常接近,不会产生重大误差。

关于android - 计算带宽的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15519015/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com