QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、视频、音频等。
QDataStream既能够存取 C++ 基本类型,如 int、char、short 等,也可以存取复杂的数据类型,例如自定义的类。实际上,QDataStream对于类的存储,是将复杂的类分割为很多基本单元实现的。
写文件操作
void Widget::ReadFile()
{
//新建本级目录下../test.txt的文件
QFile writeFile(QString("../test.txt"));
//创建数据流,与file文件相关联
QDataStream in(&writeFile);
//打开文件,只写方式
bool bIsOK=writeFile.open(QIODevice::WriteOnly);
if(bIsOK==true)
{
//往数据流中写数据,相当于往文件里写数据
QString strBuf="初学Qt";
in<<strBuf<<250;
}
writeFile.close();
}
读文件操作
void Widget::WriteFile()
{
QFile readFile("../test.txt");
QDataStream out(&readFile);
//打开文件,只读方式
bool bIsOk=readFile.open(QIODevice::ReadOnly);
if(bIsOk==true)
{
QString str;
int a;
out>>str>>a;
qDebug()<<str<<a;
}
readFile.close();
}
注意:必须按照写入的顺序,将数据读取出来。顺序颠倒的话,程序行为是不确定的,严重时会直接造成程序崩溃。
写入时,先写字符串,再到数值。 QString strBuf="初学Qt";in<<strBuf<<250;
那么读取时,也必须字符串,再到数值。 out>>str>>a;