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