Распаковка байтового массива с помощью zlib в байтовый массив

Контекст: я использую файл .mbtiles, формат файла геомапинга, который представляет собой файл базы данных sqlite, содержащий векторные плитки.

Эти векторные листы упаковываются с использованием буфера протокола и затем распаковываются.

Я использую C ++ и сейчас читаю пример декомпрессии использования zlib, но я не уверен, как обрабатывать чанки и событие конца потока.

SQLite дает мне указатель void * и длину.

Я цитирую страницу:

Для приложений, где потоки zlib встроены в другие данные, это
рутина должна быть изменена, чтобы возвратить неиспользованные данные, или в
хотя бы указать, какая часть входных данных не использовалась, поэтому
Приложение будет знать, где взять после потока ZLIB.

Методы класса буфера протокола принимают либо void *, либо std :: string. Я думаю, что я должен идти с void *.

Я не уверен, как эти события работают, и пример, кажется, не обеспечивает случай для байтовых массивов. Как мне изменить код, чтобы избежать ошибок?

1

Решение

Похоже, что SQLite дает вам поток zlib без чего-либо после него. Если так, то этот комментарий не применяется.

В любом случае, вы смотрите на правильная страница. (Вы не сказали, что такое «страница», но я узнаю цитату, так как написал ее.) Это показывает, как в целом использовать функции zlib. Вы должны быть в состоянии выяснить, как применить его к байтовому массиву вместо ввода файла.

Если данные действительно «сжаты», то вам нужно будет использовать inflateInit2() вместо inflateInit(), Прочитайте zlib документация в zlib.h.

1

Другие решения

Других решений пока нет …