为什么会要序列化

对 java对象的传输 是通过网络的 。然后网络都是通过字节传输的 所以需要用序列化的方式 将java对象转化为 字节,然后网络那头的接受端,拿到收到的字节 再反序列化出来一个对象,用来保证 java的对象能够跨进程传输。

总结了一下 序列化的几个要点:
1.在java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化
2.通过ObjectOutputStream和ObjectInputStream对对象进行序列化合反序列化操作
3. 对象是否允许被反序列化,不仅仅是取决于对象的代码是否一致,同时还有一个重要的因素(UID)
4. 序列化不保存静态变量
5. 要想父类对象也参与序列化操作,那么必须要让父类也实现Serializable接口
6. Transient关键字,主要是控制变量是否能够被序列化。如果没有被序列化的成员变量反序列化后,会被设置成初始值,比如String -> null
7. 通过序列化操作实现深度克隆

主流的序列化技术有:
JSON/Hessian(2) /xml/protobuf/kryo/MsgPack/FST/thrift/protostuff/Avro

其中常用的是 JSON 但性能最好的是 百度的jprotobuf 百度对Google的 protobuf 进行了封装。
dubbo 使用的是Hessian2 序列化的速度很快 但是字节很大
jprotobuf 序列化的速度稍微慢点,但字节很小。

这两点就是选择不同序列化技术的原因所在。

猜你喜欢

转载自blog.csdn.net/world6/article/details/79646222