Qt 您所在的位置:网站首页 二进制方式读取文件 Qt

Qt

2023-11-11 04:37| 来源: 网络整理| 查看: 265

目录Qt中的读写QDataStreamQDataStreamQt 是如何存储数据的如何保证读取数据的正确性? --> 魔术数字,文件版本,Qt版本魔术数字文件版本Qt 版本读取添加了魔数和版本号的文件什么是流的形式完整的Demo

Qt中的读写

Qt中,除了QIODevice提供了read()、readLine()、readAll()以及write()等基本的操作。同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下一篇介绍QTextStream的相关内容

QDataStream

QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、视频、音频等。

QDataStream

QDataStream既能够存取 C++ 基本类型,如 int、char、short 等,也可以存取复杂的数据类型,例如自定义的类。实际上,QDataStream对于类的存储,是将复杂的类分割为很多基本单元实现的。

结合QIODevice,QDataStream可以很方便地对文件、网络套接字等进行读写操作。我们从代码开始看起:

QFile file("file.dat"); file.open(QIODevice::WriteOnly); QDataStream out(&file); out a;

需要注意的是:

你必须按照写入的顺序,将数据读取出来。也就是说,程序数据写入的顺序必须预先定义好。在这个例子中,我们首先写入字符串,然后写入数字,那么就首先读出来的就是字符串,然后才是数字。顺序颠倒的话,程序行为是不确定的,严重时会直接造成程序崩溃。

如何保证读取数据的正确性? --> 魔术数字,文件版本,Qt版本

由于二进制流是纯粹的字节数据,带来的问题是,如果程序不同版本之间按照不同的方式读取(前面说过,Qt 保证读写内容的一致,但是并不能保证不同 Qt 版本之间的一致),数据就会出现错误。因此,我们必须提供一种机制来确保不同版本之间的一致性。通常,我们会使用如下的代码写入:

QFile file("file.dat"); file.open(QIODevice::WriteOnly); QDataStream out(&file); // 写入魔术数字和版本 out version; if (version < 100) { return BAD_FILE_TOO_OLD; } if (version > 123) { return BAD_FILE_TOO_NEW; } if (version > lots_of_interesting_data; if (version >= 120) { in >> data_new_in_version_1_2; } in >> other_interesting_data;

这段代码就是按照前面的解释进行的。

首先读取魔术数字,检查文件是否合法。如果合法,读取文件版本:小于 100 或者大于 123 都是不支持的。如果在支持的版本范围内(100



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有