QTextStream和QDataStream的区别
来源:互联网 发布:小爱同学 知乎 编辑:程序博客网 时间:2024/05/24 06:17
QTextStream和QDataStream都是面向数据流的,都适用于QIODevice,但是他们的侧重点不同。可以这么说,QTextStream能做的事情QDataStream都能做。
QTextStream 侧重于向QIODevice文本读写,这里所说的文本指的是普通的简单的QChar,QString,QLatin1Char,int等等之内的,和C语言中写文件或者网络传输的时候,先将内容填充到一个buffer,进行操作有点类似,属于普通的轻量级的流操作类。
view plaincopy to clipboardprint?
1. //下面代码就是写文件操作
2. QFile data("output.txt");
3. if (data.open(QFile::WriteOnly | QFile::Truncate)) {
4. QTextStream out(&data);
5. out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
6. // writes "Result: 3.14 2.7 "
7. }
//下面代码就是写文件操作 QFile data("output.txt"); if (data.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&data); out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7; // writes "Result: 3.14 2.7 " }
QDataStream则是侧重于数据格式和类型。QDataStream数据流不仅可以操作QTextStream所能处理的普通文本,而且可以对特定格式的类型数据进行完美的输入与输出。
熟悉Linux C开发的程序员应该知道,通过socket传输text文本数据比较容易,如果我们想通过socket传输特定的数据节结构而且跨平台以及CUP进行操作和解析就比较麻烦。比如对于一个点的坐标,要么传输一个结构体,让接收端进行解析,但是可能对于不同的平台以及不同的内存分配方式的CPU来说,解析的结果不一定是我们预期的,可是实现,但是会比较麻烦。
QDataSream就可以轻松的做到这一点,QDataSream将数据序列化。不仅可以读写text,而且还好可以读写一个特定是数据类型,比如QPoint, QFont,几乎Qt支持的所有类型都可以使用QDataSream进行操作。
就拿读写QPoint为例:
view plaincopy to clipboardprint?
1. QPoint pos(8, 6)
2. QPoint tmp;
3. QByteArray datagram;
4. QDataStream out(&datagram, QIODevice::WriteOnly);
5. out.setVersion(QDataStream::Qt_4_3);
6. out << pos();//此时,datagram里面的内容就是一个QPoint。
7.
8. out >> tmp//此时tmp的坐标就是tmp(8, 6);
QPoint pos(8, 6) QPoint tmp; QByteArray datagram; QDataStream out(&datagram, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_3); out << pos();//此时,datagram里面的内容就是一个QPoint。 out >> tmp//此时tmp的坐标就是tmp(8, 6);
QDataStream是根据类型以及输出输入顺序来决定输出数据。列举下面的例子来说明问题
view plaincopy to clipboardprint?
1. QFile file("file.dat");
2. file.open(QIODevice::WriteOnly);
3. QDataStream out(&file); // we will serialize the data into the file
4. out << QString("the answer is"); // serialize a string
5. out << (qint32)42; // serialize an integer
6.
7.
8. Example (read binary data from a stream):
9.
10.
11. QFile file("file.dat");
12. file.open(QIODevice::ReadOnly);
13. QDataStream in(&file); // read the data serialized from the file
14. QString str;
15. qint32 a;
16. in >> str >> a; // extract "the answer is" and 42
- QTextStream和QDataStream的区别
- QTextStream和QDataStream的区别
- QTextStream和QDataStream的区别
- 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
- 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(
- QTextStream流与QDataStream流
- Qt: QTextStream流与QDataStream流
- QDataStream和QByteArray
- 强大的QDataStream
- 强大的QDataStream
- QTextStream的使用
- QTextStream
- QTextStream
- QFile和QTextStream配合使用
- QDataStream传递自定义的数据类型
- QByteArray通过QDataStream的读写
- QByteArray通过QDataStream的读写
- QDataStream的二进制文件显示问题
- iOS自带的字体
- uva——DNA序列——1368
- 【Linux】Linux学习建议
- JS function document.onclick(){}报错Syntax error on token "function", delete this token
- storm 文档(1)----文档主页
- QTextStream和QDataStream的区别
- 公司新来了一个漂亮前台,面试一路过关斩将,结果一语惊人引发了大家的集体沉默!
- MVC——入门+最简单的小实例
- Dialog Animation using windowAnimations
- oracle体系结构解析(综合网友的)
- JNI加载Native Library 以及 跨线程和Qt通信
- GPU破解神器Hashcat使用简介
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- 解决ORA-01034/ORA-27101