gal*_*lex 7 java apache io android network-programming
我试图通过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;
}
Run Code Online (Sandbox Code Playgroud)
使用这些方法,我获得了比使用HttpClient更接近URLConnection的值.
两个问题:
怎么来URLConnection,我没有在OutputStream上看到一些字节大小指示标题被发送?为什么我看到只有体型?标题在哪里?网址电话?DNS解析字节?
有没有办法测量URLConnection库调用在网络接口上发送的每个字节?最低级别越好!
URLConnection 旨在抽象标头的读取(和写入)。该类的输入输出流仅代表主体;有一些特定的例程用于操作标头,以便不必直接编写这些标头。
如果您深入了解 Sun/Oracle JRE,您会发现他们的 HttpURLConnection 实现正在使用他们自己版本的 HTTP 客户端。该客户正在对整个内容进行完整的阅读和写作。
您也许能够编写自己的 URLConnection 实现,模仿 Sun/Oracle(和 Apache)正在做的事情,但同时跟踪读/写的字节数。但我敢打赌这有点复杂。
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |