解析编译后的模板数据

编译阶段是独立于客户端运行时的一个过程,客户端渲染组件,是从解析编译好的二进制数据开始,解析起始就是编译过程的逆过程,但解析流程只负责把原始数据提取出来,组织好格式,并没有直接构建出组件对象。理解了二进制数据的协议及编译过程,再看解析过程就比较清楚了。详细说明每一个步骤:

  1. 以获取到一个编译后的二进制文件开始。
  2. 先将二进制文件读取到一个字节数组里。
  3. 开始校验字节数组里的内容,先检查数组长度,我们的二进制文件必然大于27字节,再检查开头5个字符是不是ALIVV,在检查后面两位大版本号和次版本号是否匹配,因为后续可能对文件格式有升级,大版本号和次版本不同可能不兼容。如果不满足上述条件,认为是非法数据,放弃,否则开始下一步。
  4. 读取组件区数据在文件里的起始位置,以及总共多少个字节是组件数据。
  5. 读取字符串区数据在文件里的起始位置,以及总共多少个字节是字符串数据。
  6. 读取表达式区数据在文件里的起始位置,以及总共多少个字节是表达式数据。
  7. 读取扩展区数据在文件里的起始位置,以及总共多少个字节是扩展数据。
  8. 有了上述信息,开始获取每个区域的数据。
  9. 先将文件指针定位到组件区,按照文件格式,先解析出组件名字符串,记录下读取完组件名后真实组件数开始的位置。
  10. 建立以组件名为 key,到组件数据起始位置的映射。后面用户要构造组件的时候传入组件名,就可以直接找到对应的组件数据进一步构造组件。
  11. 开始解析处理字符串数据。
  12. 文件指针移到字符串区开始的位置。
  13. 按照文件格式,先读4字节,获取字符串个数。
  14. 根据字符串个数,循环读取每个字符串资源,每次先读4字节索引,在生成字符串。
  15. 每次读取完一个字符串,建立索引到字符串的映射保持到字符串资源池里。
  16. 开始处理表达式数据,文件指针移到表达式区开始的位置。
  17. 按照文件格式,先读4字节,获取表达式个数。
  18. 根据表达式个数,循环读取每个表达式资源,每次先读4字节索引,在将表达式内容封装成表达式类型结构。
  19. 每次读取一个表达式资源,建立索引到表达式的映射保持到表达式资源池里。
  20. 处理完一个二进制文件数据,结束。

最新的: