您的位置:首页 > 编程语言 > Qt开发

Qt串行化的输入和输出

2016-03-05 18:55 357 查看

参考https://lug.ustc.edu.cn/sites/qtguide/

今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来。

串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内存缓冲区等)中或是以二进制方式通过网络传输。之后可以通过反串行化从这些连续的字节(byte)数据重新构建一个与原始对象状态相同的对象,因此在特定情况下也可以说是得到一个副本,但并不是所有情况都这样。
Qt 对这类组合数据的打包方法就叫串行化(Serializing),在 Qt 帮助文档的索引里输入关键词 Serializing 就可以看到关于 Qt 串行化的帮助主题(Serializing
Qt Data Types),除了 C++ 基本数值类型,Qt 还对大量自身的类对象做了串行化。串行化得到一个字节数组 QByteArray ,可以直接用于发送。Qt 串行化数据接收就是发送的逆过程,都是通过 QDataStream 流实现。

下面是一个简单的实现
//qtcodec.cpp
#include <QDebug>
#include <iostream>
#include <QByteArray>
#include <QDataStream>

using namespace std;

QByteArray TestSerialOut()
{
//数据
int nVersion = 1;
double dblValue = 125.78999;
QString strName = QObject::tr("This an example.");
//字节数组保存结果
QByteArray baResult;
//串行化的流
QDataStream dsOut(&baResult, QIODevice::ReadWrite);  //做输出,构造函数用指针
//设置Qt串行化版本
dsOut.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流
//串行化输出
dsOut<<nVersion<<dblValue<<strName;

//显示长度
qDebug()<<baResult.length()<<"\t"<<qstrlen(baResult.data());
//返回对象
return baResult;
}

void TestSerialIn(const QByteArray& baIn)
{
//输入流
QDataStream dsIn(baIn); //只读的流,构造函数用常量引用
//设置Qt串行化版本
dsIn.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流
//变量
int nVersion;
double dblValue;
QString strName;
//串行化输入
dsIn>>nVersion>>dblValue>>strName;

//打印
qDebug()<<nVersion;
qDebug()<<fixed<<dblValue;
qDebug()<<strName;
}

int main()
{
QByteArray ba = TestSerialOut();

TestSerialIn(ba);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: