A QBuffer és QDataStream használata
Az alábbi példaprogram az alkalmazásfejlesztés repository InMemoryStream példája. Bemutatja röviden a QBuffer, mint általános adattároló buffer, és a QDataStream, mint tárolók fölött működő stream osztály használatát.
A példában létrehozunk egy buffert a memóriában, amire létrehozunk egy folyamot, ami pont ebbe a bufferbe tud írni. Utána létrehozunk ugyanarra a bufferre egy másik folyamot is, ami olvasni fog belőle. És megnézzük, hogy a bufferbe pontosan mi kerül bele.
#include <QCoreApplication>
#include <QString>
#include <QBuffer>
#include <QDataStream>
#include <QDebug>
int main(int argc, char* argv[])
{
Q_UNUSED(argc);
Q_UNUSED(argv);
A buffer tárolja az adatokat
QByteArray buffer;
A stream fog írni (“WriteOnly” nincsen). A stream tudja követni, hogy hol tart, tud írni… de tárolója nincsen, azt kívülről biztosítjuk neki.
QDataStream stream(&buffer, QIODevice::ReadWrite);
Most direkt olyan szöveget fogunk beírni a bufferbe, hogy hexában is könnyen felismerjük, hogy mi van ott.
QString text1("ABCD");
QString text2("EFG");
Most írunk a streambe. A QString osztály ki tudja magát írni és vissza is tudja magát olvasni.
stream << text1;
stream << text2;
Létrehozunk egy streamet, ami olvasni tud a bufferből. A két stream tetszőlegesen tud írni, olvasni és ugrálni a bufferen, egymást nem zavarják.
QDataStream readStream(&buffer, QIODevice::ReadOnly);
QString readText1;
QString readText2;
Fontos, hogy a két QString tudja, hogy milyen hosszú, így nem kell megkeresni a határukat. Ez nagyon kényelmessé teszi az összetettebb adatstruktúrák sorosítását, mivel csak egymás után ki kell írni az adatokat.
readStream >> readText1;
readStream >> readText2;
Megnézzük, mit sikerült visszaolvasni.
qDebug() << "Text1: " << readText1;
qDebug() << "Text2: " << readText2;
És megnézzük a buffer tartalmát is, mert tanulságos:
qDebug() << "A buffer: " << buffer.toHex();
}
A kapott kimenet az alábbi:
Text1: "ABCD"
Text2: "EFG"
A buffer: "00000008004100420043004400000006004500460047"
A QString először elmenti a saját hosszát bájtban, 32 biten (00000008), utána az egyes karaktereket UTF-16 kódolással: A (0041), B (0042), C (0043), D (0044). Utána pedig jön a második QString.
Szerzők, verziók: Csorba Kristóf