Symbian学习笔记9 之 流字典

 1、流字典

流字典也是流,它是用来管理其他流的一个辅助类,每一个流都需要一个流id,这个id是每个流的唯一标识(也就是数据库表中的主键),当然表本身也需要一个唯一的标识,因此,流字典也有自己的id,我们通常称其为“根id(root_id)”,流字典的其中一个作用就是将Uid(这是由用户指定的)与实际的流id(系统指定,用户无法提前知道)进行关联,这样,程序就可以通过Uid找到流id这样,就可以找到所对应的流了。

在使用时,我们首先要建立流字典:

CStreamDictionary* dictionary=CStreamDictionary::NewLC();

然后,我们要把我们自己定义的Uid与流id进行关联,我们定一点的Uid如下:

LOCAL_D const KStuDataStreamId=0x101F613F;//学生流

LOCAL_D const KTeachDataStreamId=0x101F6140;//教师流

 

根据以上的定义,我们通过流字典进行流关联,代码如下(该步骤通常是在写文件之后才做的):

dictionary->AssignL(TUid::Uid(KStuDataStreamId),Sid);

dictionary->AssignL(TUid::Uid(KTeachDataStreamId),Tid);

其中Sid和Tid是对应Student和Teacher的TStreamId对象,而这个对象可以通过RStoreWriteStream对象获得。

 

由于流字典也是流,所以我们也必须把流字典也保存起来并外化到文件中,方法如下:

RStoreWriteStream root;//建立根流

TStreamId rootid=root.CreateLC(*store);//为文件建立根流Id,这样,我们才能在读取该文件时取得根流

root<<*dictionary;外化流字典;

root.CommitL();//提交,外化完成

CleanupStack::PopAndDestroy();

CleanupStack::PopAndDestroy();

store->SetRootL(rootid);//设置根流id

store->CommitL();//提交,设置完成

CleanupStack::PopAndDestory();

至此,文件写操作完成。

当我们要开始读文件时,我们可以利用一下代码:

CStreamDictionary* dictionary=CStreamDictionary::NewLC();//创建流字典

RStoreReadStream rootStream;

rootStream.OpenLC(*store,store->Root());//打开根流,这里的store就是我们之前建立的文件,因此,我们可以从该文件中读出根流

rootStream>>*dictionary;//读出流字典

CleanupStack::PopAndDestroy();

在打开文件并读出流字典后,我们便可以通过Uid取得对应的流id了。

TStreamId Sid = dictionary->At(TUid::Uid(KStuDataStreamId));

TStreamId Tid = dictonary->At(TUid::Uid(KTeachDataStreamId));

有了流id,我们就可以取得相应的流进行读操作了,如:

 

RStoreReadStream readStuStream;
readStuStream.OpenLC(*store,Sid);

根据前面的例子和这次的讲解,我们已经基本上掌握了文件读写的方法,最后,我们对文件读写操作进行一次步骤的总结,希望有助于我们在实际当中的应用。

直接写文件操作:

(1)指定每一个写入流的Uid,在同一个引用中,这些Uid具备唯一性。

(2)使用CreateL()方法或CreateLC()方法创建直接文件存储。

(3)使用SetTypeL()函数指定文件存储类型,使用Layout()获得流布局Uid。

(4)创建流字典。

(5)创建每一个写入流,并使用AssignL()为各个写入流指定Uid,建立流id与Uid之间的映射关系。

(6)进行数据外化。

(7)一旦写入完成,则提交写入流。

(8)一旦写入所有的流,就将所有流写入流字典中。(此处理解为将流字典外化)

(9)提交字典流。

(10)使用SetRootL()设置根流的id。

(11)提交存储。

(12)删除存储和流字典。

直接读文件操作:

(1)用OpenL()打开文件存储。

(2)创建流字典对象,读取流字典的映射关系,流字典id有RootL()函数获得。

(3)在流字典上调用At()函数获取每个流的id。

(4)使用流id建立输出流对象。

(5)使用每一个流读取数据。

(6)删除流字典和存储。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值