boost::iostreams: gzip-Kompressionsstufe steuern

English Deutsch

In unserem vorherigen Beitrag C++: gzip on-the-fly komprimieren mit boost::iostreams haben wir gezeigt, wie man einen gzip-komprimierenden Ausgabestream mit der boost::iostreams-Bibliothek erstellt.

Dieses Beispiel zeigt, wie Sie die Kompressionsrate von gzip_compressor steuern:

Anstatt boost::iostreams::gzip_compressor() ohne Argumente zu konstruieren, verwenden Sie boost::iostreams::gzip_params(level) als Argument, wobei level (1..9) die Kompressionsstufe darstellt, mit 9 als höchster Kompressionsstufe und 1 als niedrigster Kompressionsstufe. Höhere Kompressionsstufen führen zu kleineren Dateien, sind aber langsamer (d.h. verbrauchen mehr CPU-Zeit) bei der Kompression.

Wenn Dateigröße für Sie wichtig ist, empfehle ich die Stufe 9, da die Kompression auch mit der hohen Stufe auf modernen Computern extrem schnell ist.

#Vollständiges Beispiel:

iostreams-gz-compress.cpp
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/gzip.hpp>
using namespace std;

int main(int argc, char** argv) {
    if(argc < 2) {
        cerr << "Verwendung: " << argv[0] << " <Ausgabe-.gz-Datei>" << endl;
    }
    //Dateiname aus dem ersten Befehlszeilenargument lesen
    ofstream file(argv[1], ios_base::out | ios_base::binary);
    boost::iostreams::filtering_streambuf<boost::iostreams::output> outbuf;
    outbuf.push(boost::iostreams::gzip_compressor(
        boost::iostreams::gzip_params(9)
    ));
    outbuf.push(file);
    //Streambuf in ostream umwandeln
    ostream out(&outbuf);
    //Testdaten schreiben
    out << "Dies ist ein Testtext!\n";
    //Aufräumen
    boost::iostreams::close(outbuf); // Vergessen Sie dies nicht!
    file.close();
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
find_package(Boost 1.36.0 COMPONENTS iostreams)

include_directories(${Boost_INCLUDE_DIRS})
add_executable(iostreams-gz-compress iostreams-gz-compress.cpp)
target_link_libraries(iostreams-gz-compress ${Boost_LIBRARIES})

Check out similar posts by category: C/C++