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/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

发表回复

登录后才能评论