Распаковка GZip

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by tim-oleksii, 22 Mar 2012.

  1. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Какие компоненты/библиотеки используете для распаковки GZip?

    Язык С/С++.
     
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    zlib
     
  3. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    При помощи inflateInit2 и inflate?

    Или простые gzopen, gzread?

    С первым вариантом непонятные трудности, когда Z_STREAM_END возвращается раньше конца файла.
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) качаем последнюю версию zlib
    2) в папке contrib\puff\ есть файлик puff.c
    3) это самая минимальная (кроме асма) библиотека для распаковки gzip
    4) если нужно распаковать HTTP трафик то отступи 10 байт от сигнатуры и распаковывай их.
    5) распаковка идет в 2 этапа
    - первый - NULL вместо буфера, чтобы узнать размер нужного буфера
    - второй этап - выделяешь памяти сколько надо и уже указываешь этот буфер

    проверял на HTTP трафе упакованном gzip. Если покопаться и написать парсилку структур кое какиех, то можно и gz архивы распаковывать.

    Веса добавит максимум 2 кила.
     
    1 person likes this.
  5. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Спасибо за ответ, но не много не то.
    О необходимости стрипать хедер и трейлер я знаю.

    За идею посмотреть сурсы спасибо.