, 플러시 기능을 지원하고 사용하는 것이 거의 틀림없이 간단하다 나는 저자 해요의이 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;
}
부스트와의 주요 차이점은 템플릿 클래스 필터를 사용하는 대신 단순히 문자열을 전달하고 원하는만큼 여러 번 압축 된 문자열을 작성한다는 것입니다. 각 문자열은 자동 플러시 모드에서 플러시되어 대화식 네트워크 프로토콜에서 사용할 수 있습니다. 마지막에는 압축 데이터와 종료 블록의 마지막 비트를 얻기 위해 finish를 호출하십시오. boost 예제가 더 짧지 만 std :: string으로 잘 알려지지 않은 두 개의 다른 템플릿 클래스, 즉 filtering_streambuf와 표준이 아닌 boost :: iostreams : copy를 사용해야합니다. zlib에 대한 부스트 인터페이스는 Z_SYNC_FLUSH를 지원하지 않으므로 불완전합니다. 즉, TCP 대화 형 프로토콜과 같은 온라인 스트리밍 응용 프로그램에는 적합하지 않습니다. 부스트를 좋아하고 내 C++ 프로젝트의 모든 주요 C++ 지원 라이브러리로 사용하지만이 특별한 경우에는 누락 된 플러시 기능으로 인해 내 응용 프로그램에서 사용할 수 없습니다.
아마도 여기에 StackOverflow에 구체적인 샘플을 보여줄 수 있습니다 _how_ 이것에 대한 의견으로는 라이브러리 작성자가 사용하는 simpeler입니까? –
감사합니다. 의견을 보내 주시면 감사하겠습니다. –