【发布时间】:2015-10-25 23:20:31
【问题描述】:
假设我有两个 .dat 文件;一个在我的电脑上,另一个在地球的另一边——数据通过QDataStream不断被序列化到它们中。
数据的解析方式相同——首先是某种 ID,然后是与该特定 ID 关联的对象。
QFile file("data.dat");
QDataStream stream(&file);
file.open("QIODevice::ReadWrite");
stream << *id*; // ID goes in.
stream << *data_object*; // Object with interesting data is serialized into the file.
file.close();
一段时间后 - 第一个可能看起来像这样(说明性,语法不正确):
//-------------------------------------DATA.DAT------------------------------------//
ID:873482025
dataObject
ID:129845379
dataObject
ID:836482455
dataObject
ID:224964811
dataObject
ID:625444876
dataObject
ID:215548669
dataObject
//-------------------------------------DATA.DAT------------------------------------//
但第二个还没有完全赶上。
//-------------------------------------DATA.DAT------------------------------------//
ID:873482025
dataObject
ID:129845379
dataObject
ID:836482455
dataObject
//-------------------------------------DATA.DAT------------------------------------//
是否可以同时获取两个文件——检测它们之间的差异,然后“融合”第二个文件中缺少但第一个文件中存在的文件?
显然,这可以通过编写一个函数来提取文件的内部结构、对内容进行单独分类、比较它们等等来实现——但是有没有办法通过只处理文件本身来做到这一点,而不必解析单独的内容?
【问题讨论】:
-
鉴于“解析器”是微不足道的,并且已经编写了数据流运算符,有什么问题?这似乎是一件非常微不足道的事情,除非我错过了什么。
-
ID 和对象之间是否存在 1:1 的映射关系?也就是说,只要ID相等,对象也保证相等吗?
-
当您说 1:1 映射时,您的意思是“每个 ID 一个对象”吗?如果是这样,是的——每个 ID 只有一个对象。每个对象都有一组与收集的数据相关联的唯一私有变量。与其说是功能,不如说是“有可能”——在理论上。
-
抱歉,现在我明白你的意思了:如果两个条目具有相同的 ID,则对象中包含的信息将始终相同。
标签: c++ qt serialization qdatastream