Java 使用TrafficStats类时计算的下载速度错误
我想建立android下载速度测试。为此,我使用TrafficStats类。问题是我得到了错误的结果。当我运行测试时,结果几乎相同,但在运行测试之前,我在Internet连接上施加了很大的负载。我下载文件30秒,然后(或者在下载文件时)使用TrafficStats计算字节 有人知道问题出在哪里吗 这是我正在使用的代码:Java 使用TrafficStats类时计算的下载速度错误,java,android,networking,network-traffic,Java,Android,Networking,Network Traffic,我想建立android下载速度测试。为此,我使用TrafficStats类。问题是我得到了错误的结果。当我运行测试时,结果几乎相同,但在运行测试之前,我在Internet连接上施加了很大的负载。我下载文件30秒,然后(或者在下载文件时)使用TrafficStats计算字节 有人知道问题出在哪里吗 这是我正在使用的代码: @Override protected String doInBackground(String... urls) { String do
@Override
protected String doInBackground(String... urls) {
String downloaded ="";
// String uploaded = "";
try{
long BeforeTime = System.currentTimeMillis();
long TotalTxBeforeTest = TrafficStats.getTotalTxBytes();
long TotalRxBeforeTest = TrafficStats.getTotalRxBytes();
URL url = new URL(urls[0]);
URLConnection connection = new URL(urls[0]).openConnection();
connection.setUseCaches(false);
connection.connect();
InputStream input = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(input);
byte[] buffer = new byte[1024];
int n = 0;
long endLoop = BeforeTime+30000;
while(System.currentTimeMillis() < endLoop) {
/* if (bufferedInputStream.read(buffer) != -1){
break;
}*/
}
long TotalTxAfterTest = TrafficStats.getTotalTxBytes();
long TotalRxAfterTest = TrafficStats.getTotalRxBytes();
long AfterTime = System.currentTimeMillis();
double TimeDifference = AfterTime - BeforeTime;
double rxDiff = TotalRxAfterTest - TotalRxBeforeTest;
double txDiff = TotalTxAfterTest - TotalTxBeforeTest;
Log.e(TAG, "Download skinuto. "+ rxDiff);
if((rxDiff != 0) && (txDiff != 0)) {
double rxBPS = (rxDiff / (TimeDifference/1000)); // total rx bytes per second.
double txBPS = (txDiff / (TimeDifference/1000)); // total tx bytes per second.
downloaded = String.valueOf(rxBPS) + "B/s. Total rx = " + rxDiff;
// uploaded = String.valueOf(txBPS) + "B/s. Total tx = " + txDiff;
}
else {
downloaded = "No downloaded bytes.";
}
}
catch(Exception e){
Log.e(TAG, "Error while downloading. "+ e.getMessage());
}
return downloaded;
}
@覆盖
受保护的字符串doInBackground(字符串…URL){
字符串=”;
//字符串=”;
试一试{
long BeforeTime=System.currentTimeMillis();
long TotalTxBeforeTest=TrafficStats.getTotalTxBytes();
long TotalRxBeforeTest=TrafficStats.getTotalRxBytes();
URL=新URL(URL[0]);
URL连接=新URL(URL[0])。openConnection();
connection.setUseCaches(false);
connection.connect();
InputStream输入=连接。getInputStream();
BufferedInputStream BufferedInputStream=新的BufferedInputStream(输入);
字节[]缓冲区=新字节[1024];
int n=0;
long-endLoop=之前的时间+30000;
while(System.currentTimeMillis()
我尝试了你的代码-它似乎对我很好,但我改变了
while(System.currentTimeMillis() < endLoop) {
/* if (bufferedInputStream.read(buffer) != -1) {
break;
}*/
}
while(System.currentTimeMillis()
到
while(System.currentTimeMillis()
因为read
如果到达流的末尾,则返回-1
while(System.currentTimeMillis() < endLoop) {
if (bufferedInputStream.read(buffer) == -1){
break;
}
}