QDataStream类实现将QIODevice的二进制数据串行化。一个数据流就是一个二进制编码信息流,独立于主机的操作系统,CPU或字节顺序。QDataStream可以实现c++的基本数据类型的串行化。
构造函数:
常用函数 :
atEnd() | 是否到达结束位置 |
readBytes() | 从流中读取缓冲区并返回对流的引用 |
readRawData(char *s,int len) | 将流中最多len字节读取到s中 |
resetStatus() | 重置数据流的状态 |
setByteOrder() | 设置序列化字节顺序 |
setDevice() | 设置设备 |
setStatus() | 设置状态 |
setFloatingPointPrecision() | 设置精度 |
setVersion(int v) | 数据序列化格式的版本号设置为v |
skipRawData() | 跳过字节数 |
writeBytes(const char* s,uint len) | 将长度说明符len和缓冲区s写入流,并返回对流的引用 |
writeRawData(const char* s,int len) | 将s中的len字节写入流。返回实际写入的字节数 |
<< | 将数据写入流中 |
>> | 流中读取数据 |
事务的操作:(Qt 5.7中引入)
startTransaction() | 在流上启动新的读取事务 |
rollbackTransaction() | 回滚事务 |
abortTransaction() | 中止事务 |
commitTransaction() | 提交事务 |
QDataStream::ByteOrder(读取/写入数据的字节顺序)
QDataStream::BigEndian | 最高有效字节优先(默认值)(大端) |
QDataStream::LittleEndian | 最低有效字节优先(小端) |
QDataStream::FloatingPointPrecision(浮点数精度)
QDataStream::SinglePrecision | 数据流中的所有浮点数都具有 32 位精度 |
QDataStream::DoublePrecision | 数据流中的所有浮点数都具有 64 位精度 |
写入和读取数据:
写入到文件中:
QFile file("D:/789.txt");
file.open(QIODevice::WriteOnly);
QDataStream stream(&file);
//串行化字符串
stream<<QString("abcdefg/n");
//串行化整数
stream<<(qint32)6;//写入数据
file.close();
读取文件中的内容:
QString str;
qint32 qin;
QFile file1("D:/789.txt");
file1.open(QIODevice::ReadOnly);
QDataStream in(&file1);
in>>str>>qin;//读取数据
qDebug()<<str;
qDebug()<<qin;
file1.close()
使用函数读取和写入数据:
- readRawData(char *s,int len)
- writeRawData(const char* s,int len)
注意:这种方法需要自己解码
写入数据:
QFile file("D:/789.txt");
file.open(QIODevice::WriteOnly|QIODevice::Append);
QDataStream stream(&file);
stream.writeRawData("456456",6);
file.close();
读取数据:
QFile file("D:/789.txt");
file.open(QIODevice::ReadOnly|QIODevice::Text);
QDataStream stream(&file);
stream.skipRawData(40);//跳过40个字节
char ch[10];
stream.readRawData(ch,4);//读取数据
qDebug()<<ch;
file.close();
可以设置版本号,使得更好的兼容
使用函数 setVersion(int v)进行设置