URLConnection低级别字节计数

时间:2015-11-08 16:11:16

标签: java android apache io network-programming

我试图通过URLConnection获得最低级别的字节计数。我已经开始计算两个流传递的数据,来自Apache Commons IO的CountingInputStreamCountingOutputStream,但我到达的字节数等于我发送的身体大小+回复身体尺寸我收到了回复。

在HttpClient中,我有一个MeasuringClientConnManager,我认为这是一个更低级别的字节计数。

为了获得最准确的值,我使用TrafficStats将这些库的计数与这些方法进行比较:

public static long getCurrentRx(Context context){
    int uid = context.getApplicationInfo().uid;
    return TrafficStats.getUidRxBytes(uid);
}

public static long getCurrentTx(Context context){
    int uid = context.getApplicationInfo().uid;
    return TrafficStats.getUidTxBytes(uid);
}

public static long getCurrentNetworkUsage(Context context){
    return getCurrentRx(context) + getCurrentTx(context);
}
public static long getDiffNetworkUsage(Context context, long previousNetworkUsage){
    return getCurrentNetworkUsage(context) - previousNetworkUsage;
}

使用这些方法,我获得了比使用HttpClient更接近URLConnection的值。

两个问题:

  1. 为什么URLConnection上,我没有在OutputStream上看到一些字节大小指示标题被发送?为什么我看到只有体型?标题在哪里?网址电话? DNS解析字节?

  2. 有没有办法测量对URLConnection库的调用在网络接口上发送的每个字节?最低级别越好!

1 个答案:

答案 0 :(得分:2)

URLConnection旨在抽象出标题的阅读(和写作)。该类的输入和输出流仅代表正文;有一些特定的例程来操作标题,这样就不必直接写入。

如果你深入了解Sun / Oracle JRE,你会发现他们的HttpURLConnection实现正在使用他们自己的HTTP客户端版本。该客户正在全面阅读和撰写整个内容。

您可以编写自己的URLConnection实现,模仿Sun / Oracle(和Apache)正在做的事情,但同时跟踪读/写的字节数。我打赌这有点复杂。