FBReader源码分析(四)---数据之源Model分析.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:9 大小:2MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

FBReader源码分析(四)---数据之源Model分析.pdf

FBReader源码分析(四)---数据之源Model分析.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

FFFBBBRRReeeaaadddeeerrr源码分析(四)---------数据之源MMMooodddeeelll分析创创创建建建时时时间间间:::2012/06/1510:32更更更新新新时时时间间间:::2012/06/1517:06作作作者者者:::陆再谋(nil)来来来源源源:::http://sixreader.com一、万事开头难正所谓“巧妇难为,无米之炊”。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的对象,然后model会直接跑到OEBBookReader的构造函数中,初始一下(没有任何数据),然后用readBook函数来读取数据。跟readBook(opfFile)方法,跑到(提示一下:因为我的2.0版本修改太多了,所以从这里就就用1.5版本):包名:package