TrafficStats类中接收的字节数小于使用HTTP从inputsream接收的字节数

时间:2017-04-08 15:01:54

标签: java android

我写了一段代码来测试使用蜂窝网络的设备的可用带宽。

我使用TrafficStats类来获取设备现在收到的字节数,然后让设备下载一个小文件,最后获取设备已传输的字节数和下载后消耗的时间。 / p>

我设置的下载文件大小为10245字节,但下载后getMobileRxBytes()减去getMobileRxBytes()后的数量总是低于10245字节。

我确信蜂窝网络处于活动状态且WiFi处于禁用状态,如果我使用getTotalRxBytes(),我会得到相同的结果。

这是我的代码。

InputStream inStream = null;
byte[] buffer = new byte[10245];
HttpURLConnection connection = null;

try {
    connection = (HttpURLConnection) new URL(DOWNLOAD_RATE_TEST_10KB_URL).openConnection();
    connection.setDoInput(true);
    connection.setUseCaches(false);
    connection.connect();
} catch (IOException e) { }

long startingBytes = TrafficStats.getMobileRxBytes();
long startingTime = SystemClock.elapsedRealtime();

try {
    inStream = connection.getInputStream();
    // Do some busy waiting while the inStream is open.
    while (inStream.read(buffer) != -1) { }
} catch (IOException e) { }

this.elapsedTime = SystemClock.elapsedRealtime() - startingTime;
this.downloadBytes = TrafficStats.getMobileRxBytes() - startingBytes;

try {
    if (inStream != null) { inStream.close(); }
} catch (IOException e) {}
connection.disconnect();

是否存在缓存问题?或者我以错误的方式使用API​​?

1 个答案:

答案 0 :(得分:0)

您正在通过HTTP下载:可能会发生压缩(gzip / deflate),该压缩对HTTP连接是透明的,但会减少线路上的字节数。