- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FFBBRReeaaddeerr源源码码分分析析 ((四四))数数据据之之源源MMooddeell分分析析
FFBBRReeaaddeerr源源码码分分析析 ((四四))数数据据之之源源MMooddeell分分析析
创创建建时时间间::2012/06/15 10 :32
创创建建时时间间::
更更新新时时间间::2012/06/15 17:06
更更新新时时间间::
作作 者者::陆再谋(nil)
作作 者者::
来来 源源::http ://
来来 源源::
一、万事开头难
正所谓 “巧妇难为 ,无米之炊”。FBReader要想实现能够支持各种文件格式 ,就需要对来源的数据进
行规整化处理 ,结构化出自己需要数据。求同存异 ,抽象出相同的特性为父类 ,而子类保持各自的特性。
大家可以想象 ,FBReader打开txt和epub文件 ,它们本身结构就不一样 ,但是在界面渲染显示的时
候 ,发现它们有什么特别的不同。确实是这样的 ,FBReader要想实现对各种格式的支持 ,就需要对这些文
件格式的数据进行分析。txt比较简单 ,都是文本 ;epub就复杂多了 ,不但有文本 ,还有图像 ,超链接等。
所以 ,可以认为txt是epub的子集。
FBReader就抽象出一种标识 :
也就是上面的接口,FBReader读取txt的话 ,只要在保存到自己缓存的时候在每段的前面加一个标
签 “TEXT就可以 ;而epub的话 ,碰到一段 (p) ,也是用TEXT作为标签 ,而解析的时候碰到了img,
那么保存到自己缓存文件的时候前面就加IMGE,同理 ,链接的话就是”CONTROL等。
所以这个Model的工作就是实现对不同格式的数据 ,规整出FBReader自定义的结构想要的数据 ,并且
能保存读取。
二、Model内容数据之来源
在第三篇文章中,留了一个Model结构没有详细解析 ,那么这篇就彻底把Model阐述。
包名 :packageorg.geometerplus.fbreader.fbreader;
类名 :publicfinalclassFBReaderAppextendsZLApplication
方法voidopenBookInternal(finalBookbook,finalBookmarkbookmark)
代码 :
Model=BookModel.createModel(book);
按Ctrl键的同时点击createModel方法 (谨记这个操作),就能跟过去 ,会跑到类BookModel的静态
方法createModel上。
方法 :publicstaticBookModelcreateModel(Bookbook)
功能 :根据插件 ,判断出属于那种格式 ,然后会先判断是否采用本地C生成Model还是用Java生成
Model (简单就这么说咯)一个是NativeBookModel,一个是PlainBookModel。然后插件
对Model进行初始化。
按Ctrl键同时点击createModel方法里的plugin.readModel(model)函数 ,跟下去 (以后我就直接说
跟某某函数咯)。
好 ,跑到了抽象类FormatPlugin里的一个抽象方法readModel(BookModel);
查看这个抽象方法在哪里实现的 !
按Ctrl+T (一起按)(谨记此操作),会出现如下截图 :
发现弹出的提示框中有一个OEBPlugin,那就是epub对readModel方法的实现了。点击提示框中
的 “OEBPlugin,看看到底如何实现readModel方法的。
包名 :packageorg.geometerplus.fbreader.formats.oeb
类名 :publicclassOEBPluginextendsFormatPlugin
方法 :publicbooleanreadModel(BookModelmodel)
这段代码会判断生成一个ZLFile的对象 ,然后mo
文档评论(0)