Java Android流量统计报告比我下载的多

Java Android流量统计报告比我下载的多,java,android,networking,download,Java,Android,Networking,Download,嗨,我正在运行一个简单的下载测试,看看我的连接有多快。我记录trafficStats rx值,然后下载一个5MB文件,记录rx值,然后计算差值。我知道这个文件正好是5MB 代码如下: URL url = new URL(urlString); URLConnection urlConnection = url.openConnection(); urlConnection.setConnectTimeout(connectTimeout); urlConnection.setReadTimeou

嗨,我正在运行一个简单的下载测试,看看我的连接有多快。我记录trafficStats rx值,然后下载一个5MB文件,记录rx值,然后计算差值。我知道这个文件正好是5MB

代码如下:

URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
urlConnection.setConnectTimeout(connectTimeout);
urlConnection.setReadTimeout(readTimeout);

InputStream is = urlConnection.getInputStream();
// BufferedInputStream bis = new BufferedInputStream(is);
InputStream bis = new BufferedInputStream(is, 8192);
int inputFileSize = 1024;
byte[] baf = new byte[inputFileSize];

totalRxBeforeTest = TrafficStats.getUidRxBytes(uid);

int current = 0;
while ((current = bis.read(baf)) != -1) {
}
totalRxAfterTest = TrafficStats.getUidRxBytes(uid);
rxDiff = totalRxAfterTest - totalRxBeforeTest;
问题是,我应该得到一个大约5242880字节(5MB)的值,但是我得到的是像5414730、5408715、5413867、5426647这样的值。(从4次测试运行)我希望会有一些开销,但这是一个额外的168KB!!对于一个5MB的文件来说,这需要很大的开销。我也通过uid使用TrafficStats,所以它应该是我特定应用程序中的网络统计数据


你知道是什么导致了这些额外的流量吗?

为什么3%的开销很大?有HTTP头,有TCP头,有IP头,甚至以太网头。你应该先嗅探流量并进行分析。你可能是对的。我不是网络专家,这就像是有过多的头流量。我试着嗅探流量,但我无法启动我的设备。我发现在没有root的Android上嗅探的唯一实际选项是tPacketCapture,我使用上面的代码得到了一个SocketTimeoutException。否则,代码不会出现此异常。此外,我希望当我打开连接时会有很多这样的流量。如果你看一下我从哪里得到rxBytes,它是在连接打开之后,在我开始从输入流读取之前。有趣的是,从这一点来看,TrafficStats实际上统计了头字节。我读过这篇文章,它指出头字节不包括在计数中。我正在寻找一种方法来测量下载文件时发送/接收的所有字节(包括头)。