Как рассчитать размер данных помещенных в объект ХранилищеЗначения

Любые данные в 1С можно получить в виде строкового представления с помощью функции ЗначениеВСтрокуВнутр.

Выполним данную функцию с объектом ХранилищеЗначения:

ХранилищеЗначения = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла));

ДанныеBase64 = Base64Строка(ХранилищеЗначения.Получить());

Функция возвращает строку вида:

AQE9AAAAAAAAAO+7v3siIyIsODcxMjYyMDAtM2U5OC00NGUwLWI5MzEtY2NiMWQ3ZWRjNDk3LA0KezEsDQp7MH0NCn0NCn0AAAAAAAAAAAAAAAA=
 

Можно предположить, что двоичные данные кодированы в формате Base64, который используется для преобразования двоичного формата в текстовый. Более подробно про Base64 можно прочитать перейдя по этой ссылке: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=691

Если коротко, то кодирование сводится к тому что 3 байта двоичных данных можно представить 4 символами в кодировке ASCII. Но если приходится кодировать на 3 байта, а 2 или 1 то в конце 4х символьного стринга добавляются символы "=" и "==".

Следующий шаг, получаем двоичные данные:

ДлинаФайла = СтрДлина(ДанныеBase64) - ?(Прав(ДанныеBase64,1) = "=",1,0) - ?(Прав(ДанныеBase64,2) = "==",1,0);
ДлинаФайла = Цел(ДлинаФайла/4*3);

Первая строчка рассчитывает кол-во реальных символов, которые кодирует данные. Во второй строчке выполняем ДлинаФайла/4*3 и целый результат, поскольку тот остаток, который образуется это есть то случай, когда на завершение остаются один или два байта.

PS: эксперимент не проводился со сжатым хранилищем значения, но скорее всего в результате будет получен размер сжатых данных

Главная страница

Hosted by uCoz