URLConnection conteo de bytes de bajo nivel

Estoy tratando de obtener el nivel más bajo de contar bytes posible con URLConnection . Ya he ido a contar los datos que pasan por los dos arroyos, con CountingInputStream y CountingOutputStream de la Apache Commons IO, pero la cuenta de bytes que llego es igual al tamaño del cuerpo que estoy enviando + tamaño de respuesta del cuerpo que estoy recibiendo de nuevo.

En HttpClient, tuve un MeasuringClientConnManager con lo que presumo ser un conteo de bytes de nivel más bajo.

Para obtener el valor más exacto, estoy comparando el recuento en esas bibliotecas con esos métodos, usando 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; } 

Utilizando esos métodos, obtuve valores mucho más cercanos con HttpClient que URLConnection.

Dos preguntas:

  1. ¿Cómo es posible en URLConnection, no veo en el OutputStream alguna indicación de tamaño de byte de los encabezados se envían? ¿Cómo es que sólo veo el tamaño del cuerpo? ¿Dónde están las cabeceras? La url llamada? ¿El DNS que resuelve bytes?

  2. ¿Hay una manera de medir cada byte que una llamada a la biblioteca URLConnection envía en la interfaz de red? El nivel más bajo, mejor!

URLConnection está diseñado para abstraer la lectura (y la escritura) de los encabezados. Los flujos de entrada y salida de esa clase sólo representan el cuerpo; Hay rutinas específicas para manipular los encabezados para que no tengan que ser escritos directamente.

Si mira bajo el capó en el Sun / Oracle JRE, verá que su implementación de HttpURLConnection está usando su propia versión de un cliente HTTP. Ese cliente está haciendo la lectura completa y la escritura de todo el contenido.

Podría ser capaz de escribir su propia implementación de URLConnection que imita lo que Sun / Oracle (y Apache) están haciendo, pero al mismo tiempo rastrea el número de bytes leídos / escritos. Aposté que es un poco complicado sin embargo.

  • Ajuste automático del tamaño del texto para que encaje en un botón Android
  • métodos en foreach y para bucles en java
  • Android: ListView vertical con filas superpuestas
  • RxJava / RxAndroid - maneja varios cambios de EditText
  • ¿Cómo agregar la imagen en un texto de TextView?
  • Importar nuevo módulo Android para el módulo JellyRefreshLayout
  • ¿Cómo uncheck artículos en AlertDialog (setMultiChoiceItems)?
  • WebRTC AEC en Android
  • ¿Es posible declarar una variable de 1 bit en Java?
  • La notificación de Android no muestra su contenido cuando la aplicación no se está ejecutando
  • El uso de un HashMap para almacenar grandes cantidades de datos está ralentizando mi aplicación de Android, ¿hay otras opciones?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.