В моем приложении для Android необходимо получить изображения с сервера и кэшировать их в кучу памяти.Один символ в Base64String содержит сколько байтов? 1, 2 или более
При получении запроса сервер сначала кодирует byte[]
в Base64String
и возвращает эту строку. И во время рендеринга в ImageView
приложение для Android расшифровывает Base64String
назад на byte[]
, создает Bitmap
и помещает его на ImageView
.
Как все в кеше, есть вероятность, что приложение выйдет из памяти в какой-то момент и критически критически.
Чтобы предотвратить ситуацию с памятью, в моем приложении я определил защитный квант (например, 5 МБ). Если в любой момент доступная память опускается ниже этого кванта безопасности , пользователю необходимо будет отметить некоторые изображения в качестве кандидатов для удаления. Наряду с этим приложение будет отображать оценочную память , которая будет выпущена после удаления выбранных элементов.
Bitmap
был переработан после того, как пользователь отошел от изображения, поэтому Bitmap
эффективно не удерживает память, пока мы уезжаем.
В конкретном тесте я загружаю 55 изображений, а моя куча растет от 16 MB
до 42 MB
. Это означает, что 55 изображений занимают 26 MB
. После того, как я очистил их все, куча сжимается до 16 MB
.
Но, когда я беру кумулятивную сумму длин всех Base64String
, она приходит к 11983840
. И если я считаю, один символ, как 1 byte
11983840 bytes
делает 11.4 MB
Проблема заключается в том, накопленная сумма длин Base64String
является единственной доступной мерой мне, что помогает дать пользователю знать, сколько памяти может быть освобожден от его выбора ,
Я также прочитал следующий вопрос, который упоминает, что для каждого 3 Bytes
исходных данных Base64String
будет иметь номер 4 Characters
.
Вопрос заключается в том, один символ в Base64String
имеет сколько байт? 1, 2 или более
Если 1 character
является 1 byte
, и в моем тесте куча увеличивается и уменьшается на 26 MB. Тогда почему суммарная сумма длин Base64String
составляет только 11,4 МБ?
Обновлено
Это означает, что 1 Byte
на символ.
по умолчанию CharacterSet здесь UTF-8
см этой ссылки http://stackoverflow.com/questions/13378815/base64-length-расчет? Lq = 1 –
Я уже ссылался на эту ссылку и, следовательно, сохранил ее как часть моего вопроса. Проблема в ссылке и совсем другая. –