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
.
- Android convertir cadena codificada en base64 en vista de imagen
- Descodificación de Base64 para image / jpeg; base64 en android
- Codificador y decodificador Base64
- La codificación Base64 en Swift no se decodificará en Android
- Cálculo del tamaño de Post Content-Length para el archivo codificado en Base64
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
Esto significa 1 Byte
por carácter.
El CharacterSet predeterminado aquí es UTF-8
- Obtenga Base64 de imageURI con PhoneGap
- Cómo convertir Bitmap a Base64 String
- ¿Existe una biblioteca Base64 que sea compatible con Android y Java
- Convertir mapa de bits en byteArray android
- Phonegap - ¿Cómo generar un archivo de imagen de cadena base64?
- Cómo cargar la imagen en base64 en el servidor
- Decodificar cadena grande base64
- Cómo convertir un archivo a Base64?
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)
- Construcciones que no fallan
- TextInputLayout etiqueta a achor encima de la izquierda dibujable de un EditText