金红塔山多少钱:Hadoop_IPC序列化对象的分析

来源:百度文库 编辑:九乡新闻网 时间:2024/03/28 20:33:33

IPC序列化对象的分析:

序列化对象网络中传递格式,对象类名(UTF8.writeString)+对象数据,对象数据分一下几种情况

(1)数组:数组长度+元素对象数据(递归)

(2)字符串:UTF8.writeString

(3)primitive type:DataOutput接口输出

(4)枚举:枚举名字(UTF8.writeString)

(5)Writable的实现类:Writable对象类名+对象实际数据

关键问题是如何解读序列化数据,得到对象类名之后,首先利用保存的primitive type散列表查看一下(尽量避免调用Class.forName以提高性能),再Thread.currentThread().getContextClassLoader()获得当前线程加载器以防止第三方实现Writable接口的类无法加载的情况。

对类名存在而对象实例为空的情况作特殊处理,空对象的意思是有一个类名,但是对象数据是NULL,也就是对象类名(UTF8.writeString)+NULL,这时会使用内部类NullInstance保存声称的对象类名,而把NullInstance对象实例按Writable序列化,也就是Writable.class.getName()+ NullInstance数据。

在解读Writable实际对象的时候需要注意的问题就是,从字符串到Class的转化是由类加载器完成的,但是从Class到实际对象的转化是由对象工厂完成(WritableFactories),WritableFactories保存一个从Class的散列表,以便得到工厂对象。如果这个Writable在加载时没有在WritableFactories中设置它的工厂对象,就从Class获得构造方法,构造对象。