剖析QTextStream和QDataStream的区别

简介:

剖析QTextStream和QDataStream的区别

 

对于初学者来说,QTextStream和QDataStream这两个概念的确不太好理解和区分,究竟什么时候适合使用QTextStream什么时候适合使用QDataStream也不是很明晰。

QTextStream和QDataStream都是面向数据流的,都适用于QIODevice,但是他们的侧重点不同。可以这么说,QTextStream能做的事情QDataStream都能做。
QTextStream侧重于向QIODevice文本读写,这里所说的文本指的是普通的简单的QChar,QString,QLatin1Char,int等等之内的,和C语言中写文件或者网络传输的时候,先将内容填充到一个buffer,进行操作有点类似,属于普通的轻量级的流操作类。

 

//下面代码就是写文件操作 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为例:

 

 

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是根据类型以及输出输入顺序来决定输出数据。列举下面的例子来说明问题

 

QFile file("file.dat"); file.open(QIODevice::WriteOnly); QDataStream out(&file); // we will serialize the data into the file out << QString("the answer is"); // serialize a string out << (qint32)42; // serialize an integer Example (read binary data from a stream): QFile file("file.dat"); file.open(QIODevice::ReadOnly); QDataStream in(&file); // read the data serialized from the file QString str; qint32 a; in >> str >> a; // extract "the answer is" and 42

 

 

 

 

 

 


版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/12/30/6107587.aspx

并请联系谭海燕本人或者前往谭海燕个人主页留言

目录
相关文章
|
存储 C++
QTextStream文本流用法(一)
QTextStream文本流用法(一)
|
10月前
|
存储 监控 图形学
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
548 0
|
JavaScript IDE 开发工具
QSS编辑预览工具
简述 Qt Creator 对于 QSS 的支持的不是很好,没有语法提示、智能纠错、实时预览等功能,这在一定程度上明显降低了开发效率。。。 下面,介绍几款 QSS 编辑工具,用于辅助基本开发。 简述 QSS Editor Rizek Qss Editor Kineticwing IDE 版权所有:一去丶二三里,转载请注明出处:http://blog.c
4608 0
|
算法
【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask)
> 掩膜操作可以提高图像对比度,对比度提高可以增加图像感官度、锐化,让看起来有点模糊的图像更清晰。 > 原理:提取图像的高频分量,再用一个参数放大之后与原图叠加,这样就产生了一个增强了边缘的图像。 > 提取图像的高频分量的做法有两种: > 1.直接使用高通滤波器,得到高频分量。2.通过低通滤波器,再用原图减去低频就得到了高频信息。
660 0
【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask)
|
10月前
|
C++
QML语法之property属性
QML语法之property属性
415 3
|
10月前
|
C语言 Windows
Qt 应用程序打包成安装文件
Qt 应用程序打包成安装文件
150 0
|
编解码 算法 计算机视觉
案例分享:Qt内窥镜相机录像程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)
案例分享:Qt内窥镜相机录像程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)
QWidget设置成模态对话框并弹框显示
QWidget设置成模态对话框并弹框显示
646 0
|
9月前
|
Ubuntu Linux
探索Linux中的bzip2命令:高效的数据压缩与解压缩
`bzip2`是Linux中用于高效数据压缩的命令,基于BWT和Huffman编码,尤其适合文本文件。虽然压缩速度较慢,但压缩率高于`gzip`。要安装`bzip2`,可使用各Linux发行版的包管理器。基本用法包括:使用`bzip2`命令压缩文件(默认删除源文件),添加`-d`解压缩,`-k`保留源文件。可通过循环或通配符压缩多个文件。了解更多选项,可运行`man bzip2`或`bzip2 --help`。对于高压缩率需求,`bzip2`是理想选择。