如果人生是一条隐含马尔科夫模型,那维特比算法告诉我已经偏离最优路线了,但如果起点是现在呢?
分类: Java
2013-03-20 23:53:30
Builder:
这个最简单,保存了对应clazz的实例以及javabean properties,是生成Descriptor的桥梁
Descriptor:
这个最复杂,在最开始时编写的那个proto文件里对每一个字段的描述(name,类型,索引等等)都被保存在这个对象里面
Messager:
符合PB标准的java messager对象,可直接用于生成二进制流,结构是一个大的map,key是小descriptor,value为对应的小messager,层层嵌套
最终目的:使得框架的序列化性能随着系统的启动运行而达到一个最终稳定的状态
Clazz到Descriptor:
由于做了缓存,这部分消耗的时间在系统运行的整个生命周期中来说可以忽略
Clazz到Builder:
它的生成与获取跟descriptor同理,也可以忽略
Descriptor到Messager
这部分就没法加缓存,因为跟具体实例挂钩。
Messager的结构大致是以descriptor作为key,它描述的值(不是基本类型就是嵌套出来的messager)作为value。
其中key可以遍历descriptor中的子field得出,value利用反射可以计算出来
总结:从原生的Java对象到符合PB标准的Messager就是上述三个过程了,实例无关的描述信息都缓存上了,当同一个对象第二次序列化时,只需要执行步骤3即可