概念:
文件头:通常位于打包文件的最前面,包含一些打包文件的标识符、版本或目录索引的位置、数量等信息,但不一定每种打包文件都存在文件头。
目录索引表:简单来说,目录索引表和书本的目录一样是用来快速定位实际数据的。目录索引表中包含多个索引项,每个索引项中通常包含指向实际数据的偏移地址、数据的大小、数据的文件名、数据的属性等。
偏移:偏移是地址的意思,在这里指文件内的地址而不是内存地址。
偏移地址:与上面偏移意思一样,都是指文件内的地址。
文件数据:索引项指向的实际文件数据。
打包文件格式:
- 目录结构
- 分目录结构
- 外部目录结构
- 数据块结构
- 分数据块结构
- 树型结构
目录结构存储了一个目录索引表,这个目录索引表中包含了与文件包内的资源文件相关的信息,如文件名、文件属性、文件偏移、文件大小等。
分目录结构和目录结构类似,都是使用目录索引的结构来定义打包文件内的资源文件。
分布目录结构和目录结构类似,区别是外部目录结构将目录索引表和文件数据分别存储在两个不同的文件中。
数据块结构,是一种简单的结构,使用数据块结构的打包文件通常将每个资源文件按顺序存储。每个按顺序存储文件都有自己的文件头,文件头有该文件相关的信息,最明显的数据标志是文件大小。
分数据块结构,分数据块结构的打包文件和数据块结构的打包文件基本结构一样,但是包内每一个文件都存储到一个小数据块里面。通常每个小数据块的大小是一样的。由于每个小数据块大小都一样,所以使用这个种结构的打包文件能够充分利用缓存提高读取包内数据的效率。
树型结构,模拟Windows资源管理器中的文件夹与文件之间的关系。数组结构方便查找但对数据插入和删除不灵活;链表结构方便数据插入和删除,但查找数据需要从链表头顺序访问每个节点,查找数据的速度慢;使用树型结构既可以使游戏引擎快速查找所需的资源文件位置,也方便对包内的文件进行插入、删除和修改。
参考资料
《揭秘数据解密的关键技术》
资源文件打包成一个文件的源代码:http://www.cocoachina.com/bbs/read.php?tid=278354
把cocos2dx资源进行打包的工具和应用:http://blog.163.com/sylar_lin/blog/static/19233209320135261382201/
FKPackerLib:https://github.com/duzhi5368/FKPackerLib