一、QDataStream簡介
QDataStream是Qt中用於在網路間或文件中傳輸數據的一個流類,可以將C++的數據類型序列化為二進位數據進行傳輸。
QDataStream根據系統的大小端自動判斷採用大端位元組序或小端位元組序,保證了數據在不同類型的平台間的傳輸正確性。
下面將介紹QDataStream的使用場景以及相應的代碼示例。
二、QDataStream在網路數據傳輸中的應用
在網路數據傳輸中,QDataStream可以方便地序列化和反序列化數據,使得網路傳輸數據變得非常簡單。
1.伺服器端發送數據使用示例:
<QTcpSocket *> clientSocket; //在這裡clientSocket是一個已經存在的指向客戶端的QTcpSocket指針對象 QDataStream out(clientSocket); //將QTcpSocket包裝成QDataStream out.setVersion(QDataStream::Qt_5_11); out << QString("Hello, client!");//將QString數據寫入到流中,省去了手動的數據轉換 //...
2.客戶端接收數據使用示例:
<QTcpSocket *> serverSocket; //在這裡serverSocket是一個已經存在的指向伺服器的QTcpSocket指針對象 QDataStream in(serverSocket); //將QTcpSocket包裝成QDataStream以便接收數據 in.setVersion(QDataStream::Qt_5_11); QString response; in >> response; //從流中讀取數據到response變數 //...
三、QDataStream在文件數據傳輸中的應用
在文件數據傳輸中,QDataStream同樣可以方便地序列化和反序列化數據,使得文件操作變得非常簡單。
1.寫入二進位文件使用示例:
<QFile> file("test.dat"); file.open(QIODevice::WriteOnly); QDataStream out(&file); //將QFile包裝成QDataStream out.setVersion(QDataStream::Qt_5_11); out << QString("Hello, file!");//將QString數據寫入到流中,省去了手動的數據轉換 //... file.close();
2.讀取二進位文件使用示例:
<QFile> file("test.dat"); file.open(QIODevice::ReadOnly); QDataStream in(&file); //將QFile包裝成QDataStream以便讀取數據 in.setVersion(QDataStream::Qt_5_11); QString content; in >> content; //從流中讀取數據到content變數 //... file.close();
四、QDataStream與自定義類的使用
除了C++基本數據類型外,QDataStream同樣可以序列化自定義的類。
自定義類Sample:
class Sample { public: Sample() = default; Sample(int num, QString str) :num_(num),str_(str) { } private: friend QDataStream &operator<<(QDataStream &out, const Sample &sample); friend QDataStream &operator>>(QDataStream &in, Sample &sample); int num_; QString str_; };
重載操作符實現自定義類的序列化與反序列化:
QDataStream &operator<<(QDataStream &out, &const Sample &sample) { out << sample.num_ << sample.str_; return out; } QDataStream &operator>>(QDataStream &in, &Sample &sample) { in >> sample.num_ >> sample.str_; return in; }
使用自定義類的示例:
Sample sample(1, "hello, sample!"); QFile file("sample.dat"); //寫入文件 if (file.open(QIODevice::WriteOnly)) { QDataStream out(&file); out.setVersion(QDataStream::Qt_5_11); out << sample; } //讀取文件 if (file.open(QIODevice::ReadOnly)) { QDataStream in(&file); in.setVersion(QDataStream::Qt_5_11); Sample response; in >> response; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183024.html