Java IO序列化
Java IO序列化 writeObject(Object obj) readObject(Object obj)
优点:简单,不需要外部依赖;
缺点:序列化后二进制字节流较大,不利于网络传输。
注意:
- 序列化对象需实现Serialization接口
- static属性不能被序列化,序列化保存对象的状态,static属于类状态
- transient修饰的不能被序列化
- 版本号serialVersionUID
- 版本号一致,新增字段不影响反序列化对象
- 版本号不一致,影响反序列化对象,将报错
XML序列化
XML序列化 toXML() fromXML()
xml的优点:跨语言、稳定可靠;
xml的缺点:序列化后二进制流比较大,网络传输效率低。
所以网络传输不使用xml格式,但是配置文件使用xml格式
JSON序列化
将JSON串转化成字节流。
如Java的FastJson、JavaScript的eval()函数等。还有一些Nosql数据库、消息队列也支持Json序列化方式,如Redis存储对象时,使用JSON格式,使数据支持跨平台、可读性也更强。
Dubbo中的Hessian序列化
Dubbo中的Hessian序列化
优点:序列速度快,可跨语言;
缺点:序列化后二进制占用比较大,不利于网络传输。
ProtoBuf序列化
protobuf 编码解码 基于位运算,位运算速度快,位存储占用小。