URLConnection低级字节计数

我试图通过URLConnection获得最低级别的字节计数。 我已经计算了两个流传递的数据,来自Apache Commons IO的CountingInputStream和CountingOutputStream ,但我到达的字节数等于我发送的正文大小+我收到的响应正文大小。

在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上看到一些字节大小指示标题被发送? 为什么我看到只有体型? 标题在哪里? url是多少? DNS解析字节?

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

URLConnection旨在抽象出标头的读取(和写入)。 该类的输入和输出流仅代表正文; 有一些特定的例程用于操作标题,以便不必直接编写。

如果您在Sun / Oracle JRE中查看内容,您会发现他们的HttpURLConnection实现正在使用他们自己的HTTP客户端版本。 该客户正在完整阅读和撰写整个内容。

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