Java URLConnection低级字节计数
我正在尝试使用尽可能低的字节计数级别。我已经开始计算通过两个流的数据,包括Apache Commons IO和来自Apache Commons IO的数据,但是我得到的字节计数等于我发送的正文大小+我接收的响应正文大小 在HttpClient中,我使用了一个我认为是更低级的字节计数 为了获得最精确的值,我将使用以下方法比较这些库的计数与这些方法: 使用这些方法,我通过HttpClient获得了比URLConnection更接近的值 两个问题:Java URLConnection低级字节计数,java,android,apache,io,network-programming,Java,Android,Apache,Io,Network Programming,我正在尝试使用尽可能低的字节计数级别。我已经开始计算通过两个流的数据,包括Apache Commons IO和来自Apache Commons IO的数据,但是我得到的字节计数等于我发送的正文大小+我接收的响应正文大小 在HttpClient中,我使用了一个我认为是更低级的字节计数 为了获得最精确的值,我将使用以下方法比较这些库的计数与这些方法: 使用这些方法,我通过HttpClient获得了比URLConnection更接近的值 两个问题: 为什么在URLConnection上,我没有在Out
URLConnection设计用于抽象出头的读取(和写入)。该类的输入和输出流仅代表主体;有一些特定的例程用于处理头文件,这样就不必直接写入头文件 如果您在Sun/OracleJRE中仔细观察,您会发现他们的HttpURLConnection实现使用的是他们自己版本的HTTP客户端。该客户正在对整个内容进行完整的读写 您可以编写自己的URLConnection实现,模仿Sun/Oracle(和Apache)的做法,但同时跟踪读/写的字节数。我打赌这有点复杂
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;
}