存储
*相关流的集合
*用于实现对象的持久性
*通常,存储是一个文件
 - 尽管也提供内存存储
 - 存储也可以嵌入其它存储的流中
*出于各种考虑,取代直接使用文件和文件服务器客户端API
 - 尽管与文件服务器的其它特征依然相关
*对于应用程序的框架意义重大,因为它提供对嵌入文档的支持
*存储也是DBMS提供的相关数据库的基础

存储流
*在存储中适合使用流这种类型
*流通常是在存储地上下文中创建的
*存储中的流由如下两个具体类中的一个封装
 - RStoreWriteStream代表写入流
  ·支持存储中流的创建和操作
 - RStorReadStream代表读取流
  ·支持存储中已存在的流的打开的操作

流ID
*在存储中,流的唯一的标识
 - 由TStreamId类封装
*用于给定的存储上下文中,并用来打开流
 - 比如 RStoreReadStream::OpenLC(CFileStore& store, TStreamId streamId);
*TStreamId提供ExternalizeL()和InternalizeL()函数
 - 流的ID可以外部化到其它流中,这是流网络的基础
*在存储中保存
 - 如果只有一个流,那么流ID保存在存储根中
 - 如果存储包含不止一个流,那么流ID保存在流字典中

使用存储流
*RStoreWriteStream
 - CreateL()或CreateLC()可以在存储中创建一个新的流
 - OpenL()或OpenLC()可以在存储中打开一个已经存在的流用于写操作
  ·注意,并不是所有的存储类型都支持已有的流的修改操作
 - CommitL()执行流的外部化操作
  ·作为一条简单的准则,CreateL()或CreateLC()通过调用CommitL()得以匹配
*RStoreReadStream
 - OpenL()或OpenLC()在存储中打开已有的流用于读操作

使用存储流-示例
*使用RStoreWriteStream的CreateL()或CreateLC()成员函数在存储中创建一个新的流,并且返回该流的ID
RStoreWriteStream outstream;
TStreamId id = outstream.CreateLC(*store);
...
CleanupStack::PopAndDestory();
...
*使用RStoreReadStream的OpenL()或OpenLC()成员函数来打开一个流,并且用于读取操作
RStoreReadStream instream;
TStream id;
...
instream.OpenLC(*store,id);
...

存储类型
*CStreamStore定义了在存储中添加和删除流的接口
 - 也提供执行/恢复机制,以及空间压缩和回收
*存储类型基于流存储范例
 - 持久存储
 - 嵌入存储
 - 字典存储
 - 内存存储

持久存储
*在创建存储的应用程序的生命周期之外,提供存储的持久性
 - 比如,文件存储
*尤其提供
 - 根流,通过它可以找到存储中所有的其它的流
 - 打开和关闭存储的函数
*CPersistentStore,继承自CStreamStore

文件存储
*文件存储是持久性的存储,它可以用来实现应用程序的数据文件
*CFileStore派生的文件存储有两种类型
 - 直接文件存储,由具体类CDirectFileStore进行封装
  ·直接文件存储适用于将数据内存拷贝作为主要拷贝的应用程序,比如文字处理器,这类应用程序实现了经典的载入/保存范例
 - 持久文件存储,有具体类CPermanetFileStore进行封装
  ·通常,持久文件存储适用于数据库应用程序,这类应用程序将所有的数据保存在文件中,但是偶尔会编辑数据库中的一些条目

使用文件存储
*CreateLC()创建一个存储
*RepalceLC()替换已有存储
*Open()或OpenLC()打开一个已有存储
*File()从存储中获得RFile对象的拷贝
*Detach()将存储和文件分离,实际上是放弃了文件的所有权
*Reattach()重新建立文件和文件存储的关联,实际上是获取该文件的所有权

使用文件存储- 示例
*在如下的代码片段中
 - 与文件存储相关联的文件被分离和关闭
 - 该文件然后重新打开并和该文件存储重新建立关联

LOCAL_C void doUseL(const TDesC& aName)
{
 TParse filestorename;
 ...
 fsSession.Parse(aName,filestorename);
 CFileStore* store = CPermanentFileStore::OpenLC(fsSession, filestorename, FullName(), EFileRead|EFileWrite);
 RFile thefile = store->File();
 store->Detach();
 thefile.Close();
 ...
 thefile.Open(fsSession,filestorename.FullName(), EFileRead|EFileWrite);
 store->Reattach(thefile);
 ...
}

嵌入存储
*可以在其它存储中以流的形式保存
*用来代表一个部分对象网络
 - 通过从包含的存储中拷贝(或删除)主要的流,可以更加简便地实现部分对象网络操作
*行为和直接文件存储类似
 - 一旦写入,存储中的流就不能被修改
*用于嵌入应用程序框架的对象
 - 只能嵌入直接代表文档的类型
*CEmbeddedStore,继承自CPersistentstore

字典存储
*按照通常方式包含流,但是不同的是,根流是流字典
 - 流通过UID访问,而不是直接通过流ID访问
 - 主要被应用程序框架用来处理.ini文件
*接口由CDictionaryStore抽象类提供
 - CDictionaryFileStore是具体类的一个示例,它使用文件存储来实现
*并非继承自CStreamStore,但是拥有自己的持久存储CPersistentStore和流字典CStreamDictionary
*特殊的流类型RDictionaryWriteStream和RDictionaryReadStream主要用于字典存储

流字典
*维持一张列表,用来保持UID和流ID之间的对应关系
 - UID按照特定的目的来标识流
*每一个TUid和TStreamId对构成了数组的一个条目
*类型CStreamDictionary
 - 提供成员函数来管理数组条目,比如,添加新的条目,或者改变与UID相关联的流ID
*系统初始化文件使用了流字典

文件服务器之三:存储相关推荐

  1. 鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器

    第二十一章.文件服务器之三: FTP 服务器 最近更新日期:2011/08/08 FTP (File Transfer Protocol) 可说是最古老的协议之一了,主要是用来进行档案的传输,尤其是大 ...

  2. 老外用的文件服务器,云存储服务市场乱战 老外到底都用啥

    在云服务混战的今天,市场上出现了无数云存储服务提供商,这些服务提供商都希望用户可以注册他们的服务.为了吸引更多的用户,这些厂商会采用免费云存储的策略进行营销.在专门针对企业级的云服务市场,又有哪些是值 ...

  3. Windows 2003 R2的文件服务器实施

     前言          Windows Server 2003 R2中的"文件服务器"新增加了对文件夹的磁盘配额和文件屏蔽功能,而在以前的版本中,只能对磁盘分区进行配置,并且没有 ...

  4. 存储技术与iSCSI

    本章主要介绍基于IP SAN的网络存储iSCSI.iSCSI技术以其低廉的构建成本和优秀的存储性能,博得了很多CIO和存储管理员的喜爱,目前陆续进入企业应用领域,推动了企业的存储环境向集中式转变.虽然 ...

  5. 文件服务器 说明,文件服务器搭建说明.pdf

    文件共享服务器搭建 责任人 姜 源 起讫时间 2010 11 15 至 2010 12 19 编号 JY001 0 目录目录 一 确定实现方案 1 二 方案实现方法 4 三 参考资料 12 1 文件服 ...

  6. 内卷了!DAS、NAS、SAN区别和FC SAN存储

    内卷了!DAS.NAS.SAN区别和FC SAN存储 https://www.toutiao.com/i6943518812004172299/?tt_from=weixin&utm_camp ...

  7. 存储相关知识-DAS/SAN/NAS

    存储相关知识-DAS/SAN/NAS 余二五 2017-11-15 22:16:00 浏览1826 服务器 主机 IP CPU 磁盘 存储 最近在看一些存储相关的东西,就顺手作了一些总结.我发现国内在 ...

  8. 服务器安全文件,文件服务器安全防护系统-虹安 - 数据防泄密,文档加密,源代码防泄密,数据防泄漏,DLP数据防泄密整体解决方案提供商...

    主要保护文件服务器中存储.共享的数据资产只能被合法用户合规使用,防止敏感数据泄露.扩散.无论敏感数据存储在文件服务器中,还是已被下载至终端中,均可有效防护: 实现效果: 1.文件服务器中数据以密文形式 ...

  9. 如何搭建简易又安全的企业内部文件服务器?

    提到搭建企业内部文件服务器,很多人的第一反应是Samba文件服务器. 确实,在过去的很多年里,大部分企业都是通过Windows Server的域控制器使企业内部员工方便地进行资源共享和使用网络打印机. ...

最新文章

  1. Java 重写(Override)与重载(Overload)
  2. 使用wordpress 搭建 文档索引服务器
  3. Android动态加载入门 简单加载模式
  4. C语言 从指定文件中依次读出字符直至文件结束
  5. SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法试读版
  6. MyBatis基于Maven入门实例
  7. nohup执行的jar 怎么kill_使用Shell脚本如何启动/停止Java的jar程序
  8. android studio for android learning (三) 我的第一个APP
  9. AirDisk创建网盘
  10. xxl-job shell脚本
  11. 板簧的弹性系数如何计算_滑板式钢板弹簧悬架变刚度计算方法的研究
  12. 东软始业教育结业考试
  13. 简单JAVA版本淘宝客程序上线
  14. 拉格朗日乘子法(自己总结一些要点)
  15. 哪一层提供了数据加密的功能?
  16. 【3D建模制作技巧分享】zbrush中如何卡硬边?
  17. 什么是抽象工厂模式?
  18. Java实现中文名字排序
  19. 下载tensorflow时遇到的问题
  20. 05.概念数据模型CDM

热门文章

  1. 第一章 Python Kivy 学习 -- Kivy介绍及环境安装
  2. Qualifying source code on HP-UX(chatr)
  3. GridLayout、FlowLayout和BorderLayout布局
  4. 串口通讯与步进电机驱动
  5. 【转】细说验证码安全 —— 测试思路大梳理
  6. 县域冠状动脉粥样硬化性心脏病分级诊疗
  7. (附源码)计算机毕业设计ssm大型零售电商平台——购物车管理子系统
  8. Android权限标签uses-permission
  9. java异常[java.util.regex.patternsyntaxexception dangling meta character ‘+‘ near index]解决
  10. 新基建下的智能安防:海康威视、大华股份们要给自己上道科技课