一、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
微信扫一扫
支付宝扫一扫