Как эффективно сжать буффер?

Тема в разделе "WASM.WIN32", создана пользователем nullPtr, 3 дек 2020.

Метки:
  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    http://www.quicklz.com/ по идее должна существенно быстрее zlib'а сжимать. Зависит от того, что тебе ценнее: скорость или процент сжатия.
    --- Сообщение объединено, 3 дек 2020 ---
    https://github.com/lz4/lz4 должен быть еще быстрее, наверное.
     
    nullPtr нравится это.
  2. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Такс, я маленько торомзнул

    с флагами COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_MAXIMUM
    Сжимает с 40кб до 5кб

    Результат хороший, сжимает быстро

    Трабл был в том, что я непривильно определял конечный сжатый размер буфера

    Одним словом сжал и когда обратно писал в файл сжатые данные - размер некорректно передавлся

    Там была переменная - PULONG FinalCompressedSize,
    где после RtlCompressBuffer передается конечный размер сжатого буфера

    А я там lstrlenA юзал, переобразования делал и прочее

    На серевере разжал с помощью петона - кроссплатформ же

    Всем спасибо за фидбек

    Избавился от посторонних либ. Решение кстати, грамотное(функция имеется ввиду). Мало весит, кроссплатформ, сжимает хорошо, без COM и прочее
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    WinAPI кроссплатформ?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Rel, я подумал, что он виндовый Апи заюзал , в любом случае, когда весь код зависит от виндового апи, уже не говорят о кроссплатформенности
     
  6. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    если таргет - вендовые сервера, там есчо в system32/inetsrv gzip.dll лежит. хидеров от него я не нашёл,
    слегка крутанул (всё на экспортах):
    DWORD InitCompression();
    DWORD CreateCompression(HANDLE *pgzip, BOOL some = TRUE);
    BOOL DestroyCompression(HANDLE *pgzip);
    DWORD Compress(HANDLE gzip, void *srcbuf, unsigned int srcbufsz, void *dstbuf,
    unsigned int dstbufmax, unsigned int *pdwProcessedSrcBytes, unsigned int *pdwEncodedSize, void *unk0_0x0 = NULL);
     
  7. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    все верно, заюзал rtldecompressbuffer из ntdll.dll
    Нежелательно дергать такое из ntdll, но у меня вызовы хешированы и т.д.
    То, что Рел скинул - это и хотел заюзать (если у меня панель на линуксе будет), но у меня потенциально будет hvnc, которому лучше по порту выходить к холдеру. Так что склоняюсь панель на венде

    сперва такое сделал, но суппорт овер вен 8 и сервер 12.
    Такое себе решение канеш
     
  8. Vicshann

    Vicshann Member

    Публикаций:
    0
    Регистрация:
    22 сен 2020
    Сообщения:
    36
    Немного почищенный PAQ8: https://github.com/Vicshann/Common/tree/master/PAQ8
    От CRT точно не зависит, может и WinAPI не использует.
    Для сжатия :
    Код (C++):
    1.  
    2. NPAQ8::MSTRM SrcBuf;
    3. NPAQ8::MSTRM DstBuf;
    4. unsigned long Size = 0;
    5. SrcBuf.AssignFrom(Data, DataSize);
    6. int res = NPAQ8::strm_compress(1, SrcBuf, DstBuf);
    7. void* Buffer = DstBuf.GetBuffer(&Size);
    8.  
     
    nullPtr нравится это.
  9. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Полезно
    Возьму на примету

    Ток под него надо найти скрипт на петоне (C&C будет на петоне). В моем случае вендовый апи идеально подходит
     
  10. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814