Qt的QDataStream


QT的QDataStream:适用于二进制流的文件读取/写入操作,一起来学习吧。

QDataStream的例子

点这里进行跳转例子哦!

一、QDataStream构造函数

QDataStream()


构造没有I/O设备的数据流

QDataStream(QIODevice * d)


使用d这个IO设备构造数据流

QDataStream(QByteArray * a, QIODevice::OpenMode mode)


构造对字节数组a进行操作的数据流,mode描述如何使用设备。最好用来只写数据流

QDataStream(const QByteArray & a)


构造一个对字节数组a进行操作的只读数据流

二、Public Types

1. 读/写的字节顺序:ByteOrder

名称 说明
QDataStream::BigEndian QSysInfo::BigEndian 最高有效字节优先(默认值)
QDataStream::LittleEndian QSysInfo::LittleEndian 最低有效字节优先

2. 浮点数的精度:FloatingPointPrecision

名称 说明
QDataStream::SinglePrecision 0 数据流中的所有浮点数都具有32位精度
QDataStream::DoublePrecision 1 数据流中的所有浮点数都具有64位精度

3. 流的状态:Status

名称 说明
QDataStream::Ok 0 数据流运行正常。
QDataStream::ReadPastEnd 1 数据流读取的数据已超过底层设备中数据的结尾。
QDataStream::ReadCorruptData 2 数据流已读取损坏的数据。
QDataStream::WriteFailed 3 数据流不能写入底层设备

4. 序列化格式版本号:Version

名称 说明
QDataStream::Qt_1_0 1 Version 1 (Qt 1.x)
QDataStream::Qt_2_0 2 Version 2 (Qt 2.0)
QDataStream::Qt_2_1 3 Version 3 (Qt 2.1, 2.2, 2.3)
QDataStream::Qt_3_0 4 Version 4 (Qt 3.0)
QDataStream::Qt_3_1 5 Version 5 (Qt 3.1, 3.2)
QDataStream::Qt_3_3 6 Version 6 (Qt 3.3)
QDataStream::Qt_4_0 7 Version 7 (Qt 4.0, Qt 4.1)
QDataStream::Qt_4_1 Qt_4_0 Version 7 (Qt 4.0, Qt 4.1)
QDataStream::Qt_4_2 8 Version 8 (Qt 4.2)
QDataStream::Qt_4_3 9 Version 9 (Qt 4.3)
QDataStream::Qt_4_4 10 Version 10 (Qt 4.4)
QDataStream::Qt_4_5 11 Version 11 (Qt 4.5)
QDataStream::Qt_4_6 12 Version 12 (Qt 4.6, Qt 4.7, Qt 4.8)
QDataStream::Qt_4_7 Qt_4_6 Same as Qt_4_6.
QDataStream::Qt_4_8 Qt_4_7 Same as Qt_4_6.
QDataStream::Qt_4_9 Qt_4_8 Same as Qt_4_6.
QDataStream::Qt_5_0 13 Version 13 (Qt 5.0)
QDataStream::Qt_5_1 14 Version 14 (Qt 5.1)
QDataStream::Qt_5_2 15 Version 15 (Qt 5.2)
QDataStream::Qt_5_3 Qt_5_2 Same as Qt_5_2
QDataStream::Qt_5_4 16 Version 16 (Qt 5.4)

三、Public Functions

是否到文件尾:atEnd()

bool QDataStream::atEnd() const

如果I/O设备已经到达结束位置(流或文件的结束),或者没有I/O设备集,则返回true;否则返回false

跳过len个字节:skipRawData(int len)

int QDataStream::skipRawData(int len)

1.跳过设备的len字节。返回实际跳过的字节数,或出错时返回-1
2.这相当于在长度为len的缓冲区上调用readRawData()并忽略该缓冲区

1.I/O设备

返回I/O设备:device()

QIODevice * QDataStream::device() const

返回当前设置的I/O设备,如果当前没有设置设备,则返回0

设置I/O设备:setDevice(QIODevice * d)

void QDataStream::setDevice(QIODevice * d)

将I/O设备设置为d,可以是0来取消设置为当前I/O设备

2.字节序列化顺序

返回字节顺序设置:byteOrder()

ByteOrder QDataStream::byteOrder() const

返回当前字节顺序设置——BigEndian或LittleEndian

设置序列化字节顺序:setByteOrder(ByteOrder bo)

void QDataStream::setByteOrder(ByteOrder bo)

1.将序列化字节顺序设置为bo
2.bo参数可以是QDataStream:BigEndian或QDataStream::LittleEndian
3.默认设置是big endian。除非您有特殊要求,否则我们建议您离开这个设置

3.序列化的版本号

返回序列化的版本号:version() const

int QDataStream::version() const

返回序列化的版本号

设置序列化格式版本:setVersion(int v)

void QDataStream::setVersion(int v)

1.将数据序列化格式的版本号设置为v,即版本enum的值。
2.如果您使用的是Qt的当前版本,则不必设置版本,但是对于您自己的自定义二进制格式,我们建议您这样做;
4.为了适应新的功能,一些Qt的datastream数据的序列化格式类改变了在一些版本的Qt。如果你想读的数据是由早期版本的Qt,可以读取或写入数据的程序编译Qt的早期版本,使用这个函数来修改
example:

QDataStream out(file);
out.setVersion(QDataStream::Qt_4_0);

4.读取流和写入流

读取缓冲区"s"并返回对流的引用:readBytes(char *& s, uint & l)

QDataStream & QDataStream::readBytes(char *& s, uint & l)

1.从流中读取缓冲区“s”并返回对流的引用。
2.缓冲区 “s” 是使用new[]分配的。使用delete[]操作符销毁它
3.l参数被设置为缓冲区的长度。如果读取的字符串为空,则将l设置为0,将s设置为空指针
4.序列化格式首先是一个quint32长度说明符,然后是l字节的数据

读取len字节到"s":readRawData(char * s, int len)

int QDataStream::readRawData(char * s, int len)

1.从流中最多读取len字节到“s”,并返回读取的字节数。如果发生错误,这个函数返回-1
2.缓冲区"s"必须预先分配。数据没有编码

将长度说明符len和缓冲区s写入流:writeBytes(const char * s, uint len)

QDataStream & QDataStream::writeBytes(const char * s, uint len)

1.将长度说明符len和缓冲区s写入流并返回对流的引用
2.len被序列化为quint32,后面是来自s的len字节。注意数据没有被编码

将“s”的len个字节写入流:writeRawData(const char * s, int len)

int QDataStream::writeRawData(const char * s, int len)

将len字节从s写入到流中。返回实际写入的字节数,如果错误则返回-1。数据没有编码

5.浮点精度

返回浮点精度:floatingPointPrecision()

FloatingPointPrecision QDataStream::floatingPointPrecision() const

返回数据流的浮点精度。

设置数据流的浮点精度:setFloatingPointPrecision(FloatingPointPrecision precision)

void QDataStream::setFloatingPointPrecision(FloatingPointPrecision precision)

1.将数据流的浮点精度设置为precision。
2.如果浮点精度是双精度,并且数据流的版本是Qt_4_6或更高,那么所有浮点数都将以64位精度进行读写。
3.如果浮点精度是SinglePrecision,版本是Qt_4_6或更高,那么所有浮点数都将以32位精度进行读写
4.默认值是DoublePrecision
5.此属性必须在写入数据流的对象和读取数据流的对象上设置为相同的值

6.流的状态

返回数据流的状态:status()

Status QDataStream::status() const

返回数据流的状态。

设置数据流的状态:setStatus(Status status)

void QDataStream::setStatus(Status status)

1.将数据流的状态设置为给定的“status”。
2.在调用resetStatus()之前,将忽略对setStatus()的后续调用。

重置数据流的状态:resetStatus()

void QDataStream::resetStatus()

重置数据流的状态。

剩下的一些运算符重载就不看了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章