流是一个抽象的概念,是物质从一处流向另一处的流动过程
程序开发中流是指信息从外部输入设备(键盘鼠标)向计算机内部(内存)或内存想显示器 磁盘输出的过程.这个输入输出的过程叫做流.他降低了实现程序开发的难度,因为他屏蔽了底层的实现细节.
Symbian OS 开发环境下用流读写作为较好的文件读写方式 提供了流读写的手段,分别叫做外化(Externalize)和内化(Internalize) 将数据写入到流中叫外化,把数据从流中读出叫内化.
流的概念通过系统的俩个基类RReadStream和RWriteStream得以实现,而从俩个基本类派生出来的具体类支持存放特定介质中的流.例如:RFileWriteStream和RFileReadStream实现了存放在文件中的流,RDesWriteStream RDesReadStream实现了驻留内存的流其内存通过描述符来识别.
下面是主要流类型表
头文件 类名称 介绍
s32file.h RFileWriteStream 一个文件 构造需要RFile或者是文件名
RFileReadStream
s32mem.h RDesWriteStream 内存,由一个描述符识别
RDesReadStream
s32mem.h RMemWriteStream 内存,由一个指针和其长度识别
RMemReadStream
s32mem.h RBufWriteStream 内存由从 CBufBase继承的动态缓存管
RBufReadStream
s32std.h RStoreWriteStream 后面详细介绍
RStoreReadStream
s32stor.h RDictionaryReadStream 需要一个字典存储和一个UID
RDictionaryWriteStream
s32crypt.h REncryptStream 构造需要宿主流 安全算法和初始化串
RDecryptStream
********************************************************************
为了实现流功能 至少需要s32std.h头文件,为了使用文件流需要s32file.h 另外还需要在LIBRARY中添加estor.lib
存储和流字典;
在一些数据量较大的应用程序中,有时需要处理各种不同的数据,比如企业中不同部门的数据,学校学生和教职工的数据等这时候需要很多流分别进行I/O操作 这是需要利用文件存储和流字典来操作:
存储是流的集合,其功能就是组织不同的流对不同的数据来操作,数据最终被输入到文件中或者从文件中读取,因此存储和文件是密切相关的。
本文代码描述:
在本文中先建立了一个实体类CMedal 里面有内化和外化的过程 然后定义了一个CMedalManager类来管理CMedal类 他里面维护了一个指针数组RPointerArray<CMedal> iMedalArray; 可以在他里面添加删除CMedal对象 在主类的TestStoreL()和TestRestoreL()函数用于写入和读取数据
在TestStoreL()中实例化了俩个金牌对象 俩个银牌对象 俩个铜牌对象 并将他们放到了RPointerArray中 接着定义了一个直接文件存储对象用于存放数据 这下面的代码中使用了三个流写入和读取金银铜牌的数据使得程序十分清晰
在上面的过程中使用了流字典 因为读取数据的时候必须获得写入该数据流的流id号 也就是要把读取和写入对接起来 这样的话写入数据的时候一定要讲流id保存在一个地方方便以后使用 在Symbian中提供了流字典统一管理流id 流字典也是流 他将所有的流保存起来 为每一个流id(每个流对应一个id)和流的Uid(流的Uid是用户定义的)之间建立映射 这样的话方便用户操作
下面是自己测试的代码:(标注 这个代码来自 <<Symbian OS C++编程指南>> 代码在读取数据的时候第二条数据读取不到 现在还没有解决 )
Medal.类
Medal.h
Medal.cpp:
管理类MedalManager
MedalManager.h
MedalManager.cpp
测试主类:
FileStreamExample.h
FileStreamExample.cpp