我写了一段代码来测试使用蜂窝网络的设备的可用带宽。
我使用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?
答案 0 :(得分:0)
您正在通过HTTP下载:可能会发生压缩(gzip / deflate),该压缩对HTTP连接是透明的,但会减少线路上的字节数。