2013-05-02 2 views
8

Ich möchte mein Programm in der Lage sein, zlib, lzma, lzo und bzip2 Kompressionsalgorithmen zu verwenden.Multi-Algorithmus Kompressions-Bibliothek für C

Gibt es eine Komprimierungsbibliothek für C, die das Arbeiten mit mehreren Algorithmen vereinfacht (wie libmcrypt, das mehrere Verschlüsselungsmodi und Algorithmen unterstützt)?

Erwartung etwas wie folgt aus:

struct compressor c; 
universal_compressor_init(&c, "lzma", 7 /* compression level */); 
universal_compressor_compress(&c, inputbuf, inputsize, outputbuf, &outputsize); 
universal_compressor_save_state(&c, statebuf, &statesize); 

Hinweis: Es ist nicht etwa zip/rar/7z/tar/cpio und andere Archivformate geht es um Kompression von rohen Puffer. Denken Sie an das komprimierte Netzwerkprotokoll oder an den wahlfreien Zugriff auf ein komprimiertes Blockgerät (wie cloop).

Antwort

3

LibArchive erfüllt Ihre Anforderungen.

Aus der Einleitung:

Die libarchive Bibliotheks-Features:

  • Unterstützung für eine Vielzahl von Archiv- und Komprimierungsformaten.
  • Robuste automatische Formaterkennung, einschließlich Archiv/Komprimierungskombinationen wie tar.gz. ...

EDIT: für rohe Strom Handhabung (zumindest bis sie libfilter von libarchive gespalten), betrachtet Boost::iostreams oder libbu++ (nur auf GitHub gefunden)

+0

Ist es für viele kleine unabhängige headerless komprimierte Puffer geeignet? –

+0

Primäres Ziel von libarchive ist es, mit Archiven als Bündel von Dateien zu arbeiten, nicht als Komprimierung, die in ein Protokoll eingebettet ist. –

+0

Kann ich libarchive Filter (ohne den Rest libarchive) mit der öffentlichen API von libarchive benutzen? –

0

Ich empfehle 7-zip mit (http://www.7-zip.org/sdk.html). Ich habe nichts gefunden, um es zu schlagen, sowohl für die Kompressionsgeschwindigkeit als auch für die Größe.

+0

Ich möchte große Datei komprimieren, die zufälligen Zugriff darin bewahrt. Also ich möchte kleine Blöcke komprimieren und Index speichern. Bietet 7-zip eine API, um es effizient zu machen? –

+0

Ja, das war einer meiner Bedürfnisse (schnelle Extraktion einzelner Dateien aus großen Archiven). Sie könnten auf dem 7-Zip-Forum für weitere Informationen posten: http://sourceforge.net/p/sevenzip/discussion/45797 –

+0

Wird es wirklich 13107200 kleine Dateien von 4096 Bytes jeder gut behandeln? –