Распаковка Deflate на лету

10.11.24

Разработка - Инструментарий разработчика

Распаковка Deflate средствами 1С через ХранилищеЗначения (в памяти, без временных файлов)

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Распаковка Deflate на лету:
.epf 7,49Kb ver:1.0
8
8 Скачать (2 SM) Купить за 2 150 руб.

Всем бодрого настроения!

Я люблю реверсить бинари и давно изучаю структуры файлов в 1С.

В одной из прошлых моих публикаций

 

 

я показал метод распаковки Deflate средствами 1С с помощью объектов ЧтениеZIPФайла/ЗаписьZIPФайла. Суть довольна проста: мы вокруг потока deflate прилепляем нужные заголовки, а затем натравливаем на полученный результат встроенный "архиватор". Таким образом достаем данные из сжатого файла. Так можно крутить ZIP и GZIP форматы.

Не побоюсь скромно назвать себя первопроходцем данной темы, т.к. идея такого подхода была высказана мной в далеком 2017 году. Потом алгоритм разлетелся по интернетам по всяким опенсорцам, и даже тот алгоритм успел засветиться на одной 1С-ной конференции.

Минус данного подхода в том, что нельзя создавать ZIP архивы в памяти [привет разрабам платформы, может к 2030-му сделают], приходится писать их во временные файлы на носитель.

В данной разработке deflate распаковывается в памяти, поэтому данные будут разжиматься в разы быстрее.

На анализ распаковки через встроенный тип ХранилищеЗначения натолкнул меня пользователь с ником "uno-c", который в недавней своей публикации распаковывал Gzip.

Его работу я не видел, поэтому, возможно, у нас могли получиться разные алгоритмы.

 

 

Итак, вкратце опишу что-есть-как:

Если у вас есть Gzip, то deflate из него достается элементарно - отбрасываем заголовок в начале и хвост в конце, с ZIP форматом чуть сложнее, но суть похожа.

Начал я с того, как превратить ХЗ (ХранилищеЗначения) в бинарь - тут помогла сериализация.

Затем я отбросил заголовок ХЗ и попробовал распаковать остаток: бинго - на выходе структура типа вездесущей полуJSON, где искомый файл располагается в конце. Спасибо uno-c за наводку, что блоки deflate бывают НЕсжатыми. Пришлось идти и читать спеку по deflate'у. Там достаточно понятно. Оказывается, можно вставить несжатый блок определенной структуры перед сжатым и это будет валидный deflate. Также в конце описательной части полуJSON в последних 8 байтах находится размер НЕсжатого файла, но т.к. у нас его изначально нет, можно заполнить это "ЭфЭфками".

Весь алгоритм укладывается всего в 8 строк!

Вся магия здесь в заголовках )

Не бойтесь изучать форматы, HEX-вьюверы вам в помощь!

 

 

Обработка протестирована на платформе 8.3.23.2040 , но будет работать на любой 8.3.18+ . А если убрать асинхронность, то и на 8.3.9+

 

Похожие мои публикации из той же оперы:

Сжатие/Распаковка данных по алгоритму Deflate встроенными (!) средствами платформы 1С

Распаковка хранилища значений средствами MS SQL Server

Хранилище значений в ZIP на чистом SQL

 

Ну и мой эсный ГитХаб

 

Буду рад, если заинтересовал вас данным очерком.

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.357

deflate распаковка ХранилищеЗначения GZip Zip формат

См. также

SALE! %

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    161231    892    399    

872

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    8551    65    29    

76

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    15675    38    8    

73

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23835    70    45    

119

SALE! %

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 10000 руб.

10.11.2023    10655    38    27    

63

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    188479    1142    0    

913

SALE! %

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 15000 руб.

07.10.2021    17552    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7829    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Fox-trot 163 11.11.24 20:27 Сейчас в теме
походу мало это кому нужно от слова совсем
2. SerVer1C 816 11.11.24 21:19 Сейчас в теме
(1) Пока в платформу не подвезли ЧтениеGzipФайла, это нужно, например, чтобы разжимать http-трафик, сжатый Gzip. Ну и для всяких распаковщиков 1с-ных файлов, т.к. платформа 1с всё сжимает по алгоритму Deflate.
swenzik; starik-2005; kamisov; +3 Ответить
6. leemuar 21 13.11.24 18:27 Сейчас в теме
(2) Утащу в библиотеку КоннекторHTTP, там распаковка gzip сделана через временные файлы.
3. sergey.skirdin 54 12.11.24 06:31 Сейчас в теме
(1) не соглашусь. Разные бывают ситуации, понимать как что устроено под капотом очень помогает.
4. user612295_death4321 12.11.24 09:12 Сейчас в теме
(1) не знаю мало или много, но человеку огромное спасибо, я благодаря его первым алгоритмам успешно читаю таблицу config для внутренних нужд эксплуатации.
starik-2005; SerVer1C; +2 Ответить
5. starik-2005 3090 12.11.24 11:50 Сейчас в теме
(1) Походу это нужно не только лишь всем )))
7. huse 01.12.24 13:35 Сейчас в теме
Какой принцип? Вы "хакнули" структуру хранения данных в ХЗ и досаживаете к сжатому блоку несжатый? А что делать если структура хранения изменится?
8. SerVer1C 816 01.12.24 22:02 Сейчас в теме
(7)
А что делать если структура хранения изменится?

Тогда по*ерятся данные в ваших 1с-ных базах.
Оставьте свое сообщение