编解码
Java序列化的目的主要有两个:
1.对象序列化
2.网络传输
当进行远程跨进程服务调用时,需要把被传输的对象转化为字节数组或者ByteBuffer对象。当远程服务读取到字节数组或者ByteBuffer对象时,需要将其解码为Java对象。这就是所谓的Java对象编解码技术。
Java序列化
Serializable
JDK1.1已经提供序列化功能,不需要额外的类库。一般远程调用(RPC)很少使用Java自带的序列化进行消息的编解码和传输。
Java序列化缺点:
无法跨语言
序列化后的码流太大
序列化性能低
主流编码框架
Google的Protobuf
特点:
结构化数据存储格式
编码性能高
语言无关,平台无关,扩展性好
支持Java,C++和Python
FaceBook的Thrift
Thrift支持三种典型的编解码方式
通用二进制编解码
压缩二进制编解码
优化的可选字段压缩编解码
Marshallling
可插拔的类解析器
可插拔的对象替换技术
可插拔的预定义缓存表
无需实现Serializable
缓存技术提高对象序列化性能