QDataStream網路數據流的使用場景與示例

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-24 16:25
下一篇 2024-11-24 16:26

相關推薦

  • Unity3D 創建沒有 Terrain Tile 的場景

    這篇文章將會介紹如何在 Unity3D 中創建一個沒有 Terrain Tile 的場景,同時也讓讀者了解如何通過編程實現這個功能。 一、基礎概念 在 Unity3D 中,Terr…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29
  • 使用Netzob進行網路協議分析

    Netzob是一款開源的網路協議分析工具。它提供了一套完整的協議分析框架,可以支持多種數據格式的解析和可視化,方便用戶對協議數據進行分析和定製。本文將從多個方面對Netzob進行詳…

    編程 2025-04-29
  • Python調字型大小: 用法介紹字型大小調整方法及示例代碼

    在Python中,調整字型大小是很常見的需求,因為它能夠使輸出內容更加直觀、美觀,並且有利於閱讀。本文將從多個方面詳解Python調字型大小的方法。 一、內置函數實現字型大小調整 Python…

    編程 2025-04-29
  • 選擇大容量免費雲盤的優缺點及實現代碼示例

    雲盤是現代人必備的工具之一,雲盤的容量大小是選擇雲盤的重要因素之一。本文將從多個方面詳細闡述使用大容量免費雲盤的優缺點,並提供相應的實現代碼示例。 一、存儲空間需求分析 不同的人使…

    編程 2025-04-29
  • Python強制轉型的實現方法和應用場景

    本文主要介紹Python強制轉型的實現方法和應用場景。Python強制轉型,也叫類型轉換,是指將一種數據類型轉換為另一種數據類型。在Python中,強制轉型主要通過類型構造函數、轉…

    編程 2025-04-29
  • 微軟發布的網路操作系統

    微軟發布的網路操作系統指的是Windows Server操作系統及其相關產品,它們被廣泛應用於企業級雲計算、資料庫管理、虛擬化、網路安全等領域。下面將從多個方面對微軟發布的網路操作…

    編程 2025-04-28
  • Corsregistry.a的及代碼示例

    本篇文章將從多個方面詳細闡述corsregistry.a,同時提供相應代碼示例。 一、什麼是corsregistry.a? corsregistry.a是Docker Regist…

    編程 2025-04-28
  • 蔣介石的人際網路

    本文將從多個方面對蔣介石的人際網路進行詳細闡述,包括其對政治局勢的影響、與他人的關係、以及其在歷史上的地位。 一、蔣介石的政治影響 蔣介石是中國現代歷史上最具有政治影響力的人物之一…

    編程 2025-04-28
  • Python Flask系列完整示例

    Flask是一個Python Web框架,在Python社區中非常流行。在本文中,我們將深入探討一些常見的Flask功能和技巧,包括路由、模板、表單、資料庫和部署。 一、路由 Fl…

    編程 2025-04-28

發表回復

登錄後才能評論