找回密码
 立即注册
收起左侧

看书中Qdatastream的问题。

2
回复
6777
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2014-11-21 14:33:55 显示全部楼层 |阅读模式
10Qter豆
在《QT creator 快速入门》中15.2.2 使用数据流读写二进制数据中看到如下代码:
  1. QFile file1("file.dat");
  2.     file1.open(QIODevice::WriteOnly);
  3.     QDataStream out(&file1);
  4.     out<<QString("the answer is:");
  5.     out<<(qint32)42;
  6.     file1.flush();
  7.     file1.close();

  8.     file1.open(QIODevice::ReadOnly);
  9.     QDataStream in(&file1);
  10.     QString str;
  11.     qint32 a;
  12.     in>>str>>a;
  13.     qDebug()<<str<<a;
  14.     file1.close();
复制代码
可以顺利运行。但是我有些不明白的地方:
1.例子中,先写入一个QString ,再写入一个(qint32),读出的时候是按照这个顺序读的。
那么,以Qdatastream读写数据就一定要匹配咯?不知道怎么写的,就可能读不出正确的数据?

是不是因为这个原因,书中下面介绍了:要在数据流前面写入一个简短的数据头。
是不是读的时候读出数据头。利用里面包含的幻数和版本号来确认数据格式?
这部分代码截图(图1-图3)下:

2.我按照上面代码写的数据。用ultraedit打开。
如图4:
为什么有很多空格呢?是因为写的是Qstring么?这个是qstring的格式,和c的字符串不一样。
群里有人说要看qt序列化的代码。
我搜了一下,但是还是没明白序列化是什么意思。代码也无从理解了


谢谢大家。




附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

写数据的时候,放入幻数或其他头数据,就是为了方便读取。就像tcp、udp数据有固定格式一样,我们需要为数据指定名称、大小、各部分的字节是什么数据等信息,这样接收方才可以正确进行读取。
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-11-21 14:33:56 显示全部楼层
写数据的时候,放入幻数或其他头数据,就是为了方便读取。就像tcp、udp数据有固定格式一样,我们需要为数据指定名称、大小、各部分的字节是什么数据等信息,这样接收方才可以正确进行读取。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-11-24 12:24:00 显示全部楼层
谢谢版主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了