Уменьшаем трафик: читаем HTTP ответ, сжатый GZip, используя ХранилищеЗначения 1С (без ЧтениеZipФайла)

07.11.24

Интеграция - WEB-интеграция

Обработка демонстрирует распаковку gzip-сжатого ответа HTTP сервера средствами платформы 1С (без внешней компоненты, без COMОбъекта). Для этого используется объект ХранилищеЗначения, а не ЧтениеZipФайла.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Распаковка gzip из HTTP-ответа с помощью объекта ХранилищеЗначения
.epf 6,96Kb
13
13 Скачать (1 SM) Купить за 1 850 руб.

В сети есть примеры, как средствами 1С распаковывать ответ HTTP сервера, закодированный gzip. Однако метод без использования ЧтениеZipФайла я не встречал. Методы в сети из gzip-кодированного тела HTTP-ответа формируют zip-файл с последующей его распаковкой. Мой метод формирует ХранилищеЗначения с последующим получением данных из него. Преимуществом распаковки через Хранилище является то, что не нужно записывать временные файлы. При этом код 1C функции распаковки в несколько раз короче, чем при использовании ЧтениеZipФайла.

Для демонстрации обработка получает курсы валют с сайта Центробанка. Чтобы ответ сервера Центробанка был сжат в gzip, в HTTPЗапросе устанавливается заголовок "accept-encoding: gzip". На скринах видно, что установка такого заголовка порой дает существенную экономию трафика, в данном случае получилось сжатых 1406 байтов вместо несжатых 11212.

Разрабатывалась на платформе 8.3.25, должна работать начиная с 8.3.9.

gzip распаковка HTTPОтвет сжатие deflate inflate ХранилищеЗначения

См. также

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    1228    1    1    

4

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18348    20    22    

18

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20556    13    19    

18

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    316    2    0    

5

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    2423    1    0    

3
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 839 07.11.24 17:10 Сейчас в теме
По скорости сравнивали, насколько быстрее?
Как я понимаю, суть алгоритма проста: приклеиваете заголовок ХЗ к сжатым данным и просто распаковываете. Но такой вариант не универсален - нужно заранее знать, какой тип данных внутри deflate.
2. uno-c 267 07.11.24 17:44 Сейчас в теме
(1) Вариант универсален. Из deflate берем двоичные данные, поскольку любые данные, упакованные в gzip, в своей основе двоичные, а что с ними делать после распаковки - на усмотрение разработчика: можно ПолучитьСтрокуИзДвоичныхДанных(Двоичные, Кодировка), можно Двоичные.Записать(ИмяФайла), можно Двоичные.ОткрытьПотокДляЧтения() и т.д. Суть алгоритма не совсем проста, используется особенность спецификации (RFC 1951, 3.2.4. Non-compressed blocks), которая позволяет внедрять прямо в запакованный deflate незапакованные данные. По скорости не сравнивал, но идея интересная, как-нибудь на досуге сравню.
13. uno-c 267 08.11.24 16:01 Сейчас в теме
(1) Сравнил по скорости на одном примере. ОбщийМодуль и БОНД_Коннектор - модули в свежей конфигурации, в метаданных которой только два этих модуля.
&НаСервереБезКонтекста
Процедура КурсыВалютРазнымиСпособамиНаСервере()
	ХТТПСоединение = Новый HTTPСоединение("www.cbr.ru",,,,,60,Новый ЗащищенноеСоединениеOpenSSL,Ложь);
	ХТТПЗапрос = Новый HTTPЗапрос("/scripts/XML_dynamic.asp?date_req1=01/01/2000&date_req2=08/11/2024&VAL_NM_RQ=R01235");
	ХТТПЗапрос.Заголовки.Вставить("Accept-Encoding", "gzip");
	ХТТПОтвет = ХТТПСоединение.Получить(ХТТПЗапрос);
	ДвоичноеТелоОтвета = ХТТПОтвет.ПолучитьТелоКакДвоичныеДанные();
	
	мсХранилищеНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();
	ДвоичныеРаспакованыХранилищем = ОбщийМодуль.ПрочитатьGZipХранилищем(ДвоичноеТелоОтвета);
	мсХранилищеОкончение = ТекущаяУниверсальнаяДатаВМиллисекундах();
	
	мсЧтениеZipНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();
	ДвоичныеРаспакованыЧтениемZip = БОНД_Коннектор.ПрочитатьGZip(ДвоичноеТелоОтвета);
	мсЧтениеZipОкончение = ТекущаяУниверсальнаяДатаВМиллисекундах();

	Сообщить("Миллисекунд на Хранилище: " + (мсХранилищеОкончение - мсХранилищеНачало));
	Сообщить("Миллисекунд на ЧтениеZip: " + (мсЧтениеZipОкончение - мсЧтениеZipНачало));
	Сообщить("Размер раскодированных двоичных данных, байт: " + ДвоичныеРаспакованыХранилищем.Размер());
	Сообщить("Результат распаковки разными способами тождественнен: " + (ДвоичныеРаспакованыХранилищем = ДвоичныеРаспакованыЧтениемZip)); 
КонецПроцедуры
Показать
Миллисекунд на Хранилище: 3
Миллисекунд на ЧтениеZip: 18
Размер раскодированных двоичных данных, байт: 732 064
Результат распаковки разными способами тождественнен: Да
14. uno-c 267 08.11.24 16:37 Сейчас в теме
(13) при этом
Сообщить("Размер сжатых двоичных данных, байт: " + ДвоичноеТелоОтвета.Размер()); 
Размер сжатых двоичных данных, байт: 77 117

Т.е. экономия трафика за счет сжатия - в данном случае трафик сжимается в 9,5 раз. Исходные данные 732 064 байта, а в передаче данных через сеть из-за установки заголовка "Accept-Encoding:gzip" прошло всего 77 117 байт.
3. Malfarion 262 08.11.24 01:20 Сейчас в теме
ПотокGZip.Закрыть();

Надо закрывать поток потому что приводит к утечкам памяти.
uno-c разрешает использовать код ?
5. uno-c 267 08.11.24 08:04 Сейчас в теме
(3) Платформа 1С автоматом не закрывает поток по завершении процедуры? Код позвольте пока не выкладывать в обсуждении моей обработки. Идея использовать gzip Non-compressed block пришла мне перед сном, всю ночь просидел из-за того, что какой-то онлайн-декодер gzip не воспринимал этот блок ) Повезло, что 1С нормально отрабатывает такие блоки.
10. uno-c 267 08.11.24 10:32 Сейчас в теме
(5) * не gzip, а deflate имел в виду: deflate Non-compressed blocks и deflate онлайн-декодер. Хотя, возможно с онлайн-декодером ошибаюсь, может я что неправильно делал, время было за полночь...
11. markers 278 08.11.24 11:04 Сейчас в теме
(5) 1С освобождает только по завершению метода и только если не будет ссылок (метод подсчёта ссылок сборщиком мусора).
При использовании объектов использующие большой объём памяти, крайне желательно помочь сборщику мусора.
Плюс при использовании некоторых объектов, платформа может не позволить использовать этот тип объекта, пока не закрыт старый (в рамках одного метода).
12. uno-c 267 08.11.24 13:19 Сейчас в теме
(11) ПотокGZip - локальная переменная внутри функции распаковки gzip через ХранилищеЗначения. В функции она создается, на выходе из функции она прекращает существование. Уверен, что платформа 1С закрывает поток автоматом, поскольку локальной переменной ПотокGZip больше не существует. Так что ПотокGZip.Закрыть() - думаю, это лишнее.

Эксперимент. Запаковал dt-шник размером 1 гигабайт в gzip. Далее в цикле скормил этот гигабайтный gzip моей функции распаковки gzip. Утечек памяти за пройденный на настоящий момент цикл в 39 распаковок гигабайтного гзипа - не обнаружено. В процессе циклической распаковки использование памяти компа колеблется на 35-46% (всего в компе установлено 64 Гб памяти)
&НаСервереБезКонтекста
Процедура ТестБольшойГзипНаСервере()
	Для сч = 1 по 64 Цикл
		ДвоичныеГзип = Новый ДвоичныеДанные("d:\Virtuals\FOLDERS\gzip\Base1Gb.dt.gz");
		ДвоичныеРаспакованы = ПрочитатьGZipХранилищем(ДвоичныеГзип);
		ДвоичныеРаспакованы.Записать("d:\Virtuals\FOLDERS\gzip\РаспакованХранилищем_" 
		+ Формат(ТекущаяДатаСеанса(),"ДФ=yyyyMMdd_hhmmss") + ".dt"); 
	КонецЦикла;
КонецПроцедуры
Показать

Так что, пожалуй, не буду менять код обработки. Пусть внутри функции распаковки gzip через ХранилищеЗначения так и останется всего 9 строк кода.
Прикрепленные файлы:
4. webester 26 08.11.24 06:18 Сейчас в теме
Предлагаю ознакомиться с
https://github.com/vbondarevsky/Connector/
https://openintegrations.dev/
Весь код открыт, работа с gzip в наличии
bayselonarrend; user2013751; Serg O.; +3 Ответить
7. uno-c 267 08.11.24 08:26 Сейчас в теме
(4) В коннекторе через ЧтениеZipФайла, что приводит к записи временных файлов. Распаковке через ХранилищеЗначения временные файлы не нужны. Кроме того, мой код раз в 10 короче кода распаковки в gzip коннекторе.
bayselonarrend; Serg O.; +2 Ответить
6. uno-c 267 08.11.24 08:25 Сейчас в теме
8. webester 26 08.11.24 09:31 Сейчас в теме
(7) Тогда самое время сделать пулреквест в обе репы. А не прятать код за стартманями.
BomjBandit; Il; yufan; kamisov; lostcay; pintov; starik-2005; swenzik; Xershi; +9 Ответить
9. zlllarc 08.11.24 09:43 Сейчас в теме
Идея шикарна! Создать хранилище значения, но не конструктором, а чтоб помещенное значение было уже закодировано, а потом прочитать как обычно и платформа раскодирует
15. ЕСТЬNULL 208 10.01.25 11:05 Сейчас в теме
Здравствуйте,

Четверть дня уже убил, не могу распаковать gzip. Уже 3-ая обработка с инфостара не взлетает.

Ошибка при вызове метода контекста (Получить)
{ВнешняяОбработка.РаспаковкаЧерезХЗ.Форма.Форма.Форма(95)}:РаспакованныеДанные = ХЗ.Получить();
{ВнешняяОбработка.РаспаковкаЧерезХЗ.Форма.Форма.Форма(71)}:РаспакованныеДанные = РаспаковатьДефлейт(Дефлейт);
{ВнешняяОбработка.РаспаковкаЧерезХЗ.Форма.Форма.Форма(54)}:НовАдрес = РаспаковатьСжатыеДанныеНаСервере(Адрес);
{ВнешняяОбработка.РаспаковкаЧерезХЗ.Форма.Форма.Форма(5)}:РаспаковатьСжатыеДанные();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка при выполнении файловой операции

Файл прилагаю.

В тырнете находил ещё такой код. Подскажите, кто знает, как добыть СтрокаHexВФорматеBase16?

Функция ЧтениеGZipЧерезХранилищеЗначения(ТелоКакДвоичныеДанные, СтрокаHexВФорматеBase16) Экспорт

   // Размер gzip compressed blocks (ожидаем структуру gzip = 10байт заголовок + дефлейт + 8байт подвал):
   РазмерGZip = ТелоКакДвоичныеДанные.Размер() - 18;

   //104 = 18 определение +5 block no compression + 69 определение ХЗ +  12 4пуст/4размер/4пуст:
   Буфер = Новый БуферДвоичныхДанных(РазмерGZip + 104);
   Буфер.Записать(0, ПолучитьБуферДвоичныхДанныхИзHexСтроки(СтрокаHexВФорматеBase16),92);

   ПотокGZip = ТелоКакДвоичныеДанные.ОткрытьПотокДляЧтения();
   ПотокGZip.Перейти(10, ПозицияВПотоке.Начало);// позиционируем на начало дефлейта
   ПотокGZip.Прочитать(Буфер, 104, РазмерGZip);
   ПотокGZip.Перейти(4, ПозицияВПотоке.Текущая);// позиционируем на байты размера несжатых данных данных
   ПотокGZip.Прочитать(Буфер, 96, 4);

   Возврат XMLЗначение(Тип("ХранилищеЗначения"), Base64Строка(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер))).Получить();

КонецФункции
Показать


Ну или подскажите готовый код, который выдернет строку XML из этого GZIP файла без внешних компонент и без временных файлов за 5 сантиков.

Заранее спасибо.
Прикрепленные файлы:
0000690_12008428_от_31_12_2024__XML_(1).GZIP
16. uno-c 267 10.01.25 11:42 Сейчас в теме
(15)
В тырнете находил ещё такой код. Подскажите, кто знает, как добыть СтрокаHexВФорматеBase16
Здравствуйте. То, что Вы нашли тырнете - это код моей обработки, но чуть измененный. Первый скачавший мою обработку выложил ее код на своем сайте, но скрыл самую соль за переменной СтрокаHexВФорматеBase16. Ваш прикрепленный gzip-файл (0000690_12008428_от_31_12_2024__XML_(1).GZIP) содержит внутри gzip имя запакованного файла. Думаю, три не взлетевшие обработки с Инфостарта предназначены для распаковки gzip ответов http-серверов (когда в ответе сервера приходит заголовок "Content-Encoding: gzip" и соответствующее тело ответа). Такие ответы не включают имени файла в gzip-теле ответа. В частности, моя обработка не предполагает, что в gzip-ответе будет содержаться имя файла.
// Размер gzip compressed blocks (ожидаем структуру gzip = 10байт заголовок + дефлейт + 8байт подвал):
Так что даже если я скажу Вам, что должно быть в переменной СтрокаHexВФорматеBase16 - то это Вам не поможет.
17. ЕСТЬNULL 208 10.01.25 12:06 Сейчас в теме
(16)

Взял отсюда:
https://koder.by/chtenie_gzip.php

Похоже, что название файла всегда "XML_file.xml", это может помочь?
Собирался быстренько распарсить док, а вот нет. Как всегда, мина, где не ждёшь.

Если что, это финансовые документы РЖД, которые они шлют клиентам в ЭДО.
Использовать внешние бинарники и компоненты прям не комильфо, так как обработка серийная.
18. uno-c 267 10.01.25 12:16 Сейчас в теме
(17)
Взял отсюда:
да-да, я об этом и говорил.
Похоже, что название файла всегда "XML_file.xml"
Если название файла всегда одинаковой длины - то задача проста, т.к. не нужен анализ структуры gzip, достаточно пару мест в коде поменять.
19. ЕСТЬNULL 208 10.01.25 12:28 Сейчас в теме
(18)

Вы можете это сделать? Сколько sm вам отправить?
20. uno-c 267 10.01.25 12:36 Сейчас в теме
(19) Да, могу. Вы про 5 сантиков что-то говорили) А стартмани можно напрямую отправлять?
23. ЕСТЬNULL 208 10.01.25 13:10 Сейчас в теме
(20)

Блин, я так и не смог понять, как их вам отправить. Подключил поддержку, они сказали нельзя просто взять и отправить. Капец...
24. uno-c 267 10.01.25 13:14 Сейчас в теме
(23) Все получилось, Вы их отправили. Вы выставили 5 стартмани за ответ, я ответил Вам кодом и забрал 5 см. Проверяйте, у меня Ваша РЖД распаковалась. Там одну строку я не стал публичить прямо в обсуждение, возьмите ее или из лички Инфостарта или из моей обработки, если Вы ее скачивали.
22. uno-c 267 10.01.25 13:06 Сейчас в теме +5 $m
(19)
&НаСервереБезКонтекста
Функция ПрочитатьGZipРЖД(ДвоичныеGZip) Экспорт
	РазмерДефлейта = ДвоичныеGZip.Размер() - 18 - 13; // размер gzip compressed blocks (ожидаем структуру gzip = 10байт заголовок + 13 имя файла и 0 + дефлейт + 8байт подвал, т.е. размер дефлейта = РазмерДвоичныхGzip - 10 - 8 - 13)
	БуферХранилища = Новый БуферДвоичныхДанных(104 + РазмерДефлейта); //104 = 18 префикс сжатого ХЗ + 5 block (1 not compressed not last, 2 LEN, 2 NLEN) + 69 определение ДД-типа в ХЗ +  12 (4пуст/4размер несжатых/4пуст)
	БуферХранилища.Записать(0, ПолучитьБуферДвоичныхДанныхИзHexСтроки("здесь я Вам в личку отправил что должно быть, или возьмите из моей обработки, если Вы ее скачивали"),92); 
	ПотокGZip = ДвоичныеGZip.ОткрытьПотокДляЧтения();
	ПотокGZip.Перейти(10+13, ПозицияВПотоке.Начало);// позиционируем на начало дефлейта
	ПотокGZip.Прочитать(БуферХранилища, 104, РазмерДефлейта);// читаем в буфер дефлейт
	ПотокGZip.Перейти(4, ПозицияВПотоке.Текущая);// позиционируем на байты размера несжатых данных, RFC 1952 2.3 ISIZE - size of the original (uncompressed)
	ПотокGZip.Прочитать(БуферХранилища, 96, 4);// читаем в буфер байты, в которых указан размер несжатых данных
	Возврат XMLЗначение(Тип("ХранилищеЗначения"), Base64Строка(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферХранилища))).Получить();
КонецФункции
Показать
ЕСТЬNULL; +1 Ответить
26. ЕСТЬNULL 208 10.01.25 13:26 Сейчас в теме
(22)

Очень рад, что удалось отправить sm!
Обработка есть - PUBID_2232508-РаспаковкаЧерезХЗ, но что оттуда надо вставить, не понял.
Больше суток на ногах, не одупляю уже ничего, извините. Можете направить в личку, что туда надо вставить, пожалуйста?
27. uno-c 267 10.01.25 13:27 Сейчас в теме
(26) В личку Вам сразу отправил как только код здесь выложил, проверяйте. Если обработку скачивали - то замените
БуферХранилища.Записать(0, ПолучитьБуферДвоичныхДанныхИзHexСтроки("здесь я Вам в личку отправил ...

на строку из скачанной обработки (строки в одном и том же месте, в третьей строке функции)
БуферХранилища.Записать(0, ПолучитьБуферДвоичныхДанныхИзHexСтроки("0201534B6F ...
29. ЕСТЬNULL 208 10.01.25 13:36 Сейчас в теме
(27)

Да, всё получилось, спасибо!
21. SerVer1C 839 10.01.25 12:51 Сейчас в теме
(15) Вот код для вашего случая:
&НаКлиенте
Процедура Распаковать()
	
	Путь = "C:\TEMP\0000690_12008428_от_31_12_2024__XML_(1).GZIP";
	
	ФП = Новый ФайловыйПоток(Путь, РежимОткрытияФайла.Открыть, ДоступКФайлу.Чтение);
	
	ФП.Перейти(10, ПозицияВПотоке.Начало);
	
	Буф = Новый БуферДвоичныхДанных(1);
	
	Ч = -1;
	Кол = 0;
	
	Пока Ч <> 0 Цикл
		ФП.Прочитать(Буф, 0, 1);
		Ч = Буф.Получить(0);
		Кол = Кол + 1;
	КонецЦикла;
	
	Дефлейт = Новый ПотокВПамяти;
	
	ФП.КопироватьВ(Дефлейт, ФП.Размер() - 18 - Кол);
	
	ФП.Закрыть();
	
	Бинарник = Дефлейт.ЗакрытьИПолучитьДвоичныеДанные();
	
	Адрес = ПоместитьВоВременноеХранилище(Бинарник);
	
	НовАдрес = РаспаковатьСжатыеДанныеНаСервере(Адрес);
	
	Данные = ПолучитьИзВременногоХранилища(НовАдрес);
	
	Данные.Записать("C:\TEMP\0000690_12008428_от_31_12_2024.XML");
	
КонецПроцедуры
Показать


Метод "РаспаковатьСжатыеДанныеНаСервере()" возьмёте из моего нового распаковщика Deflate
25. uno-c 267 10.01.25 13:25 Сейчас в теме
(21) Вы тогда уж вставьте в свою статью кликабельную ссылку на мою обработку или на мой профиль. А то сюда постите ссылку на своё, а в своей статье кликабельную ссылку на меня постеснялись )
28. SerVer1C 839 10.01.25 13:33 Сейчас в теме
(25) Я ваш алгоритм не использовал, и даже не видел его (думаю, что у нас вообще разные алгоритмы распаковки), с чего я должен вас рекламировать? Мне почему-то в телегу прилетел ваш сегодняшний ответ, хотя он не в подветке моих комментов, поэтому решил человеку помочь, т.к. он ранее скачал ту мою обработку. Если хотите, можете пропиарить себя в комментах моей публикации.
30. uno-c 267 10.01.25 13:45 Сейчас в теме
(28)
с чего я должен вас рекламировать

Не рекламировать, а ссылаться и выражать благодарность кликабельно. Вы это уже сделали, только сделали без гиперссылки. Наводку на RFC 1951, 3.2.4. Non-compressed blocks я дал Вам в первом же ответе обсуждения моей обработки.

Цитаты из Вашей разработки:
натолкнул меня пользователь с ником "uno-c", который в недавней своей публикации распаковывал Gzip.

Спасибо uno-c за наводку, что блоки deflate бывают НЕсжатыми.
31. SerVer1C 839 10.01.25 13:54 Сейчас в теме
(30) От вас была только наводка на RFC, мне самому пришлось изучать спецификацию Deflate-сжатия, самому ковырять бинари, самому писать алгоритм распаковки и т.п.
Ну не знаю, насколько очень полезным будет совет, например, использовать фотошоп для создания рисунков )
Добавлю гиперссылки, если это вам так важно.
32. uno-c 267 10.01.25 14:14 Сейчас в теме
(31) Добавьте пожалуйста гиперссылки, если несложно. От меня была наводка на конкретный пункт RFC, на существование non-compressed blocks и плюс установленный факт, что в 1С Хранилище понимает гибрид non-compressed + compressed. Без моей наводки Вы бы могли так не догадаться о существовании non-compressed blocks. А то, что Вы любите ковыряться в двоичных и RFC - респект, я сам такой - поэтому и дал Вам наводку.
33. SerVer1C 839 10.01.25 14:19 Сейчас в теме
(32)
и плюс установленный факт, что в 1С Хранилище понимает гибрид non-compressed + compressed
Это не Хранилище понимает, а библиотека zlib, которая в 95+% софта так или иначе используется, т.е. практически везде.
Гиперссылки добавлены.
34. uno-c 267 10.01.25 14:43 Сейчас в теме
Оставьте свое сообщение