Un solo carácter en Base64String contiene cuántos bytes? 1, 2 o más

En mi aplicación de Android, el requisito es buscar las imágenes del servidor y almacenarlas en caché en la memoria.

Al recibir la solicitud, el servidor primero codifica el byte[] en Base64String y devuelve esa cadena. Y, en el momento de convertirlo en ImageView la aplicación Android decodifica la Base64String nuevo al byte[] , crea un Bitmap y lo coloca en ImageView .

Como todo está en caché, hay posibilidades de que la aplicación de salir de la memoria en algún momento, y accidente críticamente.

Para evitar la situación de falta de memoria, he definido un quantum de seguridad (por ejemplo, 5 MB) en mi aplicación. Si en algún momento la memoria disponible va por debajo de este quantum de seguridad , el usuario necesitaría marcar algunas de las imágenes como los candidatos que se van a eliminar. Junto con, la aplicación mostraría la memoria estimada va a ser liberado una vez que los elementos seleccionados se borran.

El Bitmap se ha reciclado una vez que el usuario se aleja de la imagen, por lo que el Bitmap no tiene ninguna memoria mientras no estés.

En una prueba en particular, descargo 55 imágenes, y mi montón crece de 16 MB a 42 MB . Esto significa que 55 imágenes ocupan 26 MB . Después de borrar todos ellos, el montón se reduce a 16 MB .

Pero, cuando tomo una suma acumulativa de longitudes de toda la Base64String viene a 11983840 . Y si considero un carácter como 1 byte el 11983840 bytes hace 11.4 MB

El problema es que la suma acumulativa de las longitudes de Base64String es la única medida disponible para mí, que ayuda a dejar saber al usuario cuánta memoria puede ser liberada por su selección.

También he leído la siguiente pregunta, que menciona, para cada 3 Bytes de datos originales de la Base64String tendrá 4 Characters .

Cálculo de la longitud de Base64?

La pregunta es, un solo carácter en Base64String contiene cuántos bytes? 1, 2 o más

Si 1 character es 1 byte , y en mi prueba el montón crece y se encoge por 26 MB . Entonces, ¿por qué la suma acumulada de las longitudes de Base64String es sólo 11,4 MB ?

Actualizado

Introduzca aquí la descripción de la imagen

Esto significa 1 Byte por carácter.

Introduzca aquí la descripción de la imagen

El CharacterSet predeterminado aquí es UTF-8

Empecemos desde el principio …

Base64 es un formato de codificación basado en un conjunto de 64 caracteres – cada carácter vale 6 bits de datos (2 ^ 6 = 64). Por lo tanto, al convertir, cada byte de 8 bits de entrada necesita (8/6) = 1.333333 … caracteres.

Pero dado que los ordenadores sólo almacenan bytes completos, es más fácil decir que para cada 3 bytes (3 * 8 = 24 bits) de entrada, se generan 4 caracteres base-64 (4 * 6 = 24 bits).

Ahora, usted dice que su longitud total de la serie base-64 es de 11 millones de caracteres. En Java, las cadenas se almacenan en formato Unicode de 16 bits: 1 carácter = 2 bytes.

Así, 11 millones de caracteres utilizarán más de 20 MB sólo en los datos de carácter sin formato. Que, combinado con objetos, variables y otro estado necesario para almacenar la información significa que 26 MB es un valor razonable para la cantidad de datos que está utilizando.

Por lo tanto, una regla general que puede utilizar para estimar el uso de memoria es (((input_data_in_bytes * 4/3) * 2) + unos pocos MB)

  • Las imágenes (base64) no se suben correctamente
  • No es capaz de convertir Bitmap a Perfect Base64 String en Android?
  • Phonegap Plugin: Cómo convertir Base64 String a una imagen PNG en Android
  • NumberFormatException en número válido Cadena
  • Apache Commons Codec con Android: no se pudo encontrar el método
  • Cómo cambiar el tamaño de un mapa de bits en Android?
  • Almacenar cadena codificada en base64 como archivo
  • ¿Hay alguna diferencia entre Base64.encodeBase64 de Apache y Base64.encode de Android con el indicador Base64.Default?
  • Reproducir audio utilizando datos de base64 en html5
  • descodificador base64 en android en API nivel 7
  • Cómo base64 codificar una imagen en javascript
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.