Каталог решений - Сжатие строк внутренними методами 1С

Сжатие строк внутренними методами 1С

Сжатие строк внутренними методами 1С

В наличии

Два основных варианта сжатия: сжатие с помощью архивации и временных файлов, а также сжатие внутренними методами 1С с помощью base64.

Категория:

Описание

Добрый день, сегодня хочу разобрать с вами два метода сжатия строк, первый будет, наверное, самый классический, где мы создаём временные файлы и запихиваем строку в файл, чтобы заархивировать его, дабы уменьшить вес, вот его пример:

&НаСервере
Функция СжатьJSONНаСервере(СтрокаJSON)
		
	ИмяФайла = ПолучитьИмяВременногоФайла(".txt");
	
	ТекстовыйФайл = Новый ТекстовыйДокумент;
	ТекстовыйФайл.УстановитьТекст(ТекстJSON);
	
	ТекстовыйФайл.Записать(
	ИмяФайла, // путь для сохранения
	КодировкаТекста.UTF8, // кодировка
	Символы.ВК + Символы.ПС // разделитель строк
	);
	
	ИмяФайлаЗИП = ПолучитьИмяВременногоФайла(".zip");
	НовыйАрхив = Новый ЗаписьZipФайла(
	ИмяФайлаЗИП,
	"", // пароль на архив
	МетодСжатияZIP.Сжатие, // сжатие или копирование
	УровеньСжатияZIP.Оптимальный
	);
	НовыйАрхив.Добавить(ИмяФайла);
	НовыйАрхив.Записать();
	
	ДД = новый ДвоичныеДанные(ИмяФайлаЗИП);
	
	УдалитьФайлы(ИмяФайла);
	УдалитьФайлы(ИмяФайлаЗИП);
	
	Возврат XMLСтрока(ДД);

КонецФункции

Но этот вариант получается очень громоздким, он создает временные файлы и выполняется дольше, нежели вы бы обращались к методам, которые предоставляет вам сама 1С, пример:

&НаСервере
Функция НовыйВарНаСервере(ТекстJSON)
	СжатиеДанных = Новый СжатиеДанных(9);
	Значение = Новый ХранилищеЗначения(ТекстJSON,СжатиеДанных);
	СтрокаBase64 = XMLСтрока(Значение);											
	Возврат СтрокаBase64;  
КонецФункции

В соответствии с таким сжатием расшифровка строки становится тоже кратно меньше.

Ну, а посмотреть ее вы сможете, если скачаете файл :3

Ну и под конец самое интересное — это тесты сравнения по объему веса сжатого файла:

Думаю, с учетом отказа от временных файлов и ускорением выполнения процедуры, результат налицо.

has been added to your cart:
Оформление заказа