文章目录

  • QDataStream的例子
  • 一、QDataStream构造函数
  • 二、Public Types
    • 1. 读/写的字节顺序:ByteOrder
    • 2. 浮点数的精度:FloatingPointPrecision
    • 3. 流的状态:Status
    • 4. 序列化格式版本号:Version
  • 三、Public Functions
      • 是否到文件尾:atEnd()
      • 跳过len个字节:skipRawData(int len)
    • 1.I/O设备
      • 返回I/O设备:device()
      • 设置I/O设备:setDevice(QIODevice * d)
    • 2.字节序列化顺序
      • 返回字节顺序设置:byteOrder()
      • 设置序列化字节顺序:setByteOrder(ByteOrder bo)
    • 3.序列化的版本号
      • 返回序列化的版本号:version() const
      • 设置序列化格式版本:setVersion(int v)
    • 4.读取流和写入流
      • 读取缓冲区"s"并返回对流的引用:readBytes(char *& s, uint & l)
      • 读取len字节到"s":readRawData(char * s, int len)
      • 将长度说明符len和缓冲区s写入流:writeBytes(const char * s, uint len)
      • 将“s”的len个字节写入流:writeRawData(const char * s, int len)
    • 5.浮点精度
      • 返回浮点精度:floatingPointPrecision()
      • 设置数据流的浮点精度:setFloatingPointPrecision(FloatingPointPrecision precision)
    • 6.流的状态
      • 返回数据流的状态:status()
      • 设置数据流的状态:setStatus(Status status)
      • 重置数据流的状态:resetStatus()

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()

重置数据流的状态。

剩下的一些运算符重载就不看了。

Qt的QDataStream相关推荐

  1. QT的QDataStream类的使用

    详细说明 QDataStream类提供二进制数据到QIODevice的序列化. 数据流是编码信息的二进制流,它与主机计算机的操作系统,CPU或字节顺序无关,均为100%. 例如,运行Windows的S ...

  2. QT creater联机版斗地主斗地主(服务器与客户端两部分)

    代码下载: https://download.csdn.net/download/qq_42660681/11826538 程序简介 个人的暑假实训是学习QT编辑器的使用方法.帮助文档中使用了来自老师 ...

  3. C++Qt开发——文件操作

    简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同.IO操作的本质是连续存储空间的数据读写. 1. IO设备的类型 顺序 ...

  4. Qt序列化和反序列化

    定义: 对象转换为二进制-->序列化 二进制转换为对象-->反序列化 序列化: Qt中实现对象序列化的类是QDataStream,写二进制到流中 QFile file("file ...

  5. 从零开始山寨Caffe·伍:Protocol Buffer简易指南

    你为Class外访问private对象而苦恼嘛?你为设计序列化格式而头疼嘛? --欢迎体验Google Protocol Buffer 面向对象之封装性 历史遗留问题 面向对象中最矛盾的一个特性,就是 ...

  6. 数字图像处理作业-医学图像浏览器

    使用Qt框架编写的一个支持课程提供的.raw格式16位灰度图操作的图像处理器,自定义Image类型,封装几何变换.灰度映射.图像增强等功能,可以多步撤回及多图切换,附加一个比较简单的伪彩色图生成. 感 ...

  7. 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(

     新建项目13IO 13IO.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets network CON ...

  8. Qt翻译相关类之QDataStream

    QDataStream Class QDataStream  类提供的二进制数据的序列化到  QIODevice中. 更多... Header: #include <QDataStream> ...

  9. Qt序列化与反序列化(QDataStream)

    功能:Qt序列化与发序列化的实现(QDataStream) 用途:UI界面自定义数据结构的保存于读取 ```cpp struct Body{double weight;double height; } ...

  10. Qt学习笔记--文件读写(QFile、QDataStream、QTextStream)

    一.QFile 头文件: #include<QFile> #include<QFileDialog> QFile 读文件 基本操作 通过按钮打开文件对话框 void Widge ...

最新文章

  1. android post请求_Vue 网络请求框架 axios 使用教程
  2. java9可执行jar_单个java文件打成可执行jar包
  3. word2vec安装以及使用
  4. 字符设备驱动程序之poll机制
  5. 方立勋_30天掌握JavaWeb_JSTL标签库
  6. 笑联 x mPaaS | 12 个模块,全面小程序化,如何打造真正的一次开发复用多端?
  7. 图解extends and implements 的区别
  8. 计算机台式电源3c号,台式机电源选购经验:3C认证是必须的!(2)
  9. 网站中被误解的用户体验设计
  10. java.lang.Class.isPrimitive()用法解析
  11. vue-cli设置proxy代理
  12. Java常用到的快捷键
  13. 使用WPF设计类似Visio的简单绘图软件
  14. 在 KITTI 数据集中利用车辆位姿真值拼接 pcd 点云并滤波,得到一个准确的点云地图
  15. 什么是云计算,云计算是什么意思
  16. shell 脚本程序中空格 $符号的使用
  17. 记录使用QRCode 显示并下载二维码图片
  18. iperf的ios版本;无线局域网测速
  19. comon lisp标准_common-lisp – Common Lisp的最新标准
  20. python批量提取word指定内容_python批量提取word内信息

热门文章

  1. 可视化编程软件有哪些好的推荐?
  2. JavaScript高级程序设计
  3. 计算机离散数学视频教程,离散数学(全105讲)【理工学社】
  4. 心电自动分析技术综述-Phililps DXL / GE Marquette / Glasgow / HES Hannover / Mortara
  5. Windows安装JDK1.8
  6. 只安装mysql客户端_单独安装mysql客户端
  7. CentOS 7.4 安装Teamviewer 14
  8. mysql数据库的属性_mysql 数据库属性
  9. SQL语句中的主键和外键
  10. openstack学习之路-python运维(user)