Это C++ библиотека Zlib обертка, из которой я автор, поддерживает флеш-функциональность и, возможно, проще в использовании:
https://github.com/rudi-cilibrasi/zlibcomplete
Это так же просто, как это:
#include <iostream>
#include <zlc/zlibcomplete.hpp>
using namespace zlibcomplete;
using namespace std;
int main(int argc, char **argv)
{
const int CHUNK = 16384;
char inbuf[CHUNK];
int readBytes;
ZLibCompressor compressor(9, auto_flush);
for (;;) {
cin.read(inbuf, CHUNK);
readBytes = cin.gcount();
if (readBytes == 0) {
break;
}
string input(inbuf, readBytes);
cout << compressor.compress(input);
}
cout << compressor.finish();
return 0;
}
Основное отличие от boost заключается в том, что вместо использования фильтра класса шаблона вы просто передаете строку и выписываете сжатую строку, которая выводится столько раз, сколько вы хотите. Каждая строка будет очищена (в режиме auto_flush), поэтому ее можно использовать в интерактивных сетевых протоколах. В конце концов просто завершите вызов, чтобы получить последний бит сжатых данных и блок завершения. Хотя пример форсирования короче, для этого требуется использование двух других классов шаблонов, которые не так широко известны как std :: string, а именно filtering_streambuf и менее стандартного boost :: iostreams: copy. Интерфейс boost для zlib является неполным, поскольку он не поддерживает Z_SYNC_FLUSH. Это означает, что он не подходит для онлайновых потоковых приложений, таких как интерактивные протоколы TCP. Мне нравится форсировать и использовать его в качестве моей основной библиотеки поддержки C++ во всех моих проектах на C++, но в этом конкретном случае она не использовалась в моем приложении из-за отсутствия функций флеша.
Возможно, вы можете продемонстрировать конкретный образец здесь, на StackOverflow, на _how_, это, на ваш взгляд, как автор библиотеки, является simpeler для использования? –
Спасибо, я сделал это, оцените отзывы. –