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.
- HashMap no proporciona valores en el orden en que los agregó
- "No se pudo encontrar la clase android.transition.Transition" excepción al pulsar el botón Atrás
- barra de progreso en la parte superior del botón en el problema de diseño relativo en Android Studio
- ¿Cómo puedo cargar mi propia clase Java en C en Android?
- Carga de un archivo a través de SSL con Client Side Certificate y HttpsURLConnection de Android
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:
-
¿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?
-
¿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!
- Archivo de tipo de entrada de la vista web de Android
- Evitar el bucle de sincronización de red al sincronizar desde la red en Android ContentProvider
- ¿Qué patrón de diseño es bueno para el desarrollo de aplicaciones Android
- ¿Cuál es el uso de BaseColumns en Android
- NDK no encuentra las bibliotecas estándar de C ++
- NoClassDefFoundError: Resolución fallida de: Lokhttp3 / internal / Platform
- Proceso se bloquea durante la creación del inyector de RoboGuice, si hay una instancia burlada en cualquier módulo
- NullPointerException validando el correo electrónico
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.
- Detección de pantallas UHD de 4K en Android
- ViewPager, getChildFragmentManager () & getFragmentManager ()