Die Boost C++ Bibliotheken

Kapitel 34. Boost.IOStreams

Inhaltsverzeichnis

Dieses Kapitel stellt die Bibliothek Boost.IOStreams vor. Boost.IOStreams bricht die aus der Standardbibliothek bekannten Streams in mehrere Bestandteile auf. So definiert die Bibliothek ein Konzept namens Device, um ganz allgemein Datenquellen und -senken zu beschreiben. Neben Device kennt Boost.IOStreams ein Konzept namens Stream, das die von Streams aus der Standardbibliothek bekannte Schnittstelle zur formatierten Datenein- und -ausgabe zur Verfügung stellt. Ein Stream, so wie er von Boost.IOStreams definiert wird, ist jedoch nicht automatisch mit einer bestimmten Datenquelle oder -senke verbunden.

Boost.IOStreams bietet zahlreiche Implementationen der beiden Konzepte Device und Stream an. So existiert zum Beispiel mit boost::iostreams::mapped_file ein Device, um eine Datei ganz- oder teilweise in den Speicher zu laden. Mit boost::iostreams::stream wird eine Stream-Implementation angeboten, die mit einem Device wie boost::iostreams::mapped_file verknüpft wird, um über die bekannten Stream-Operatoren operator<< und operator>> Daten zu lesen oder zu schreiben.

Neben boost::iostreams::stream stellt die Bibliothek mit boost::iostreams::filtering_stream eine zweite Stream-Implementation zur Verfügung. Dieser Stream bietet die Möglichkeit, Daten zu filtern. So wird ein boost::iostreams::filtering_stream nicht nur mit einem Device verknüpft. Es können außerdem Filter hinzugefügt werden. Boost.IOStreams stellt zum Beispiel mit boost::iostreams::gzip_compressor einen Filter zur Verfügung, der Daten im GZIP-Format schreiben kann.

Boost.IOStreams kann auch eine Verbindung zu systemspezifischen Objekten herstellen. So existieren Devices, die mit einem Windows-Handle oder einem File Descriptor verknüpft werden können. Auf diese Weise können Objekte aus Low-Level-APIs in plattformunabhängigen C++-Code überführt werden.

Alle von Boost.IOStreams definierten Klassen und Funktionen befinden sich im Namensraum boost::iostreams. Eine Master-Headerdatei existiert nicht. Boost.IOStreams ist außerdem eine Bibliothek, die vorkompiliert wird, da sie nicht ausschließlich aus Headerdateien besteht. Das ist insofern wichtig, als dass abhängig von der Art und Weise, wie die Bibliothek vorkompiliert wurde, bestimmte Funktionen unter Umständen nicht unterstützt werden.