Datei- und Datastream-Funktionen

Die Klasse QIODevice ist die Basis-Schnittstellenklasse für alle E/A-Geräte in Qt Core. QIODevice bietet sowohl eine gemeinsame Implementierung als auch eine abstrakte Schnittstelle für Geräte, die das Lesen und Schreiben von Datenblöcken unterstützen. Das Gerät kann ein Speicherpuffer, eine Datei oder ein Datenstrom sein.

Einige Unterklassen wie QFile wurden unter Verwendung eines Speicherpuffers für die Zwischenspeicherung von Daten implementiert. Dies beschleunigt Programme durch die Reduzierung von Lese-/Schreiboperationen. Die Pufferung macht Funktionen wie getChar() und putChar() schnell, da sie auf dem Speicherpuffer statt direkt auf dem Gerät selbst arbeiten können.

Die Klasse QFile bietet Funktionen zum Lesen von und Schreiben in Dateien. Ein QFile kann allein oder, was noch bequemer ist, mit einem QTextStream oder QDataStream verwendet werden.

QBuffer ermöglicht den Zugriff auf eine QByteArray über die Schnittstelle QIODevice. Die QByteArray wird wie eine normale Datei mit wahlfreiem Zugriff behandelt. Ein Beispiel:

QBuffer buffer;
char ch;

buffer.open(QBuffer::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch);  // ch == 'Q'
buffer.getChar(&ch);  // ch == 't'
buffer.getChar(&ch);  // ch == ' '
buffer.getChar(&ch);  // ch == 'r'

Rufen Sie open() auf, um den Puffer zu öffnen. Rufen Sie dann write() oder putChar() auf, um in den Puffer zu schreiben, und read(), readLine(), readAll() oder getChar(), um aus ihm zu lesen. size() gibt die aktuelle Größe des Puffers zurück, und Sie können beliebige Positionen im Puffer ansteuern, indem Sie seek() aufrufen. Wenn Sie mit dem Zugriff auf den Puffer fertig sind, rufen Sie close() auf.

Die Klasse QDataStream ermöglicht die Serialisierung von Binärdaten in eine QIODevice. Ein Datenstrom ist ein binärer Strom kodierter Informationen, der zu 100 % unabhängig vom Betriebssystem, der CPU oder der Byte-Reihenfolge des Host-Computers ist. So kann beispielsweise ein Datenstrom, der von einem PC unter Windows geschrieben wurde, von einem Sun SPARC mit Solaris gelesen werden. Sie können einen Datenstrom auch verwenden, um unkodierte Binärdaten zu lesen/schreiben.

Weitere Einzelheiten zu den Datentypen, die QDataStream serialisieren kann, finden Sie unter Serialisierung von Qt-Datentypen.

Die Klasse QTextStream bietet eine bequeme Schnittstelle zum Lesen und Schreiben von Text. QTextStream kann auf QIODevice, QByteArray oder QString zugreifen. Mit den Streaming-Operatoren von QTextStream können Sie bequem Wörter, Zeilen und Zahlen lesen und schreiben. Es ist auch üblich, QTextStream zu benutzen, um Konsoleneingaben zu lesen und Konsolenausgaben zu schreiben.

Es gibt drei allgemeine Möglichkeiten, QTextStream beim Lesen von Textdateien zu verwenden:

  • Stück für Stück, durch Aufruf von readLine() oder readAll().
  • Wort für Wort. QTextStream unterstützt Streaming in QStrings, QByteArrays und char* Puffer. Wörter werden durch Leerzeichen getrennt, und führende Leerzeichen werden automatisch übersprungen.
  • Zeichenweise, durch Streaming in QChar oder char-Typen. Diese Methode wird oft für eine bequeme Eingabeverarbeitung beim Parsen von Dateien verwendet, unabhängig von der Zeichenkodierung und der Zeilenende-Semantik. Um Leerzeichen zu überspringen, rufen Sie skipWhiteSpace() auf.

QByteArray kann verwendet werden, um sowohl rohe Bytes (einschließlich \0) als auch traditionelle 8-Bit-Strings mit '\0'-Terminierung zu speichern. Die Verwendung von QByteArray ist viel bequemer als die Verwendung von const char *. Es wird immer sichergestellt, dass die Daten von einem '\0'-Terminator gefolgt werden, und es werden implizit gemeinsam genutzte Klassen (copy-on-write) verwendet, um die Speichernutzung zu reduzieren und unnötiges Kopieren von Daten zu vermeiden.

Zusätzlich zu QByteArray bietet Qt auch die Klasse QString zum Speichern von String-Daten. Für die meisten Zwecke ist QString die am besten geeignete Klasse. Sie speichert 16-Bit-Unicode-Zeichen. Es ist jedoch eine gute Idee, QByteArray zu verwenden, wenn Sie rohe Binärdaten speichern müssen und wenn der Speicherverbrauch kritisch ist (zum Beispiel bei Qt for Embedded Linux).

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.