Qt QDataStream类在帮助文档中,是这样解释的:
The QDataStream class provides serialization of binary data to a QIODevice.
翻译为:QDataStream类提供了序列化的二进制数据给QIODevice.
QDataStream使用二进制存取数据,这就使得他存放的数据非常小,而且可以存放各种样的数据。
与之相对应的是:QTextStream类。在帮助文档中的解释如下:
The QTextStream class provides a convenient interface for reading and writing text.
翻译为:QTextStream类提供了一个非常方便的接口,用于读写文本。
QTextStream的优点和缺点都很明显。有点是读写方便,因为只能存取文本文件,而缺点也是这样。
举例:
QDataStream的输入,存放在test.dat文件中:
QString name = "Bill"; QImage image("test.jpg");//在工程文件中需要加入test.jpg文件 QMap<QString,QColor> map; map.insert("red",Qt::red); map.insert("green",Qt::green); map.insert("blue",Qt::blue); QFile file("test.dat"); if(!file.open(QIODevice::WriteOnly)) { QMessageBox::information(this,"提示","文档建立出错"); //如果不存在test.dat时,因为打开方式是WriteOnly,所以会建立这样一个文档 return; } QDataStream out(&file); out.setVersion(QDataStream::Qt_4_1);//设置版本号 out<<name<<quint32(age)<<image<<map; /* quint32: Typedef for unsigned int. This type is guaranteed to be 32-bit on all platforms supported by Qt 翻译为:为unsigned int 翻译为:这种类型保证在所有被Qt支持的平台都是32位,即4字节 */
QDataStream类的输出:
QString name; quint32 age; QImage image; QMap<QString,QColor> map; QFile file("test.dat"); if(!file.open(QIODevice::ReadOnly)) { QMessageBox::information(this,"提示","不存在此文件"); //当不存在test.dat时,会打开错误 return; } QDataStream in(&file); in>> name >> age >>image >>map; //写入的顺序必须和读取的顺序一致