一、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-hk/n/183024.html
微信掃一掃
支付寶掃一掃