Java序列化(Serializable)

什么是序列化

在java中,将一个对象变成字节称为序列化。反之称为反序列。

为什么需要序列化

  • 方便网络传输

  • 方便存储

  • 方便跨平台

不可能直接存储并还原一个对象,在计算机世界,存储通信都是以字节流形式进行的。

Java对象序列化生成的字节流并不一定要通过java来进行反序列,它完全可以跨平台使用.net甚或其他程序处理。

序列化后的字节流由于更精简,所以其通信成本更小,优于xml,所以许多RPC框架会使用字节流通信。

如何序列化

  • java原生方式
  • hessian
  • Kryo

java原生方式:通过java的ObjectInputStream和ObjectOutputStream,可以将实现了Serializable接口的对象进行反序列化和序列化。

由于序列化的过程本身需要耗时,且序列化后的字节过大也不方便传输,这两点上,java自身的序列化机制做的并不优秀。于是有了第三方的序列化框架,hessian和kryo,他们在序列化的效率上要更优秀。

传说Kryo的序列化要由于hessian。不过dubbo貌似用的hessian。

参考资料

1,http://www.tutorialspoint.com/java/java_serialization.htm
2,http://stackoverflow.com/questions/447898/what-is-object-serialization