常见的RPC协议 - 比较Hessian, Thrift, JSON-RPC等协议的特点和应用场景。 序列化就是将类对象编码成可在网络中传输的二进制数据,jdk原生序列化有下面2个问题:
- Java序列化机制是Java内部的一种对象编解码技术,无法跨语言使用。例如对于异构系统之间的对接,Java序列化后的码流需要能够通过其他语言反序列化成原始对象(副本),目前很难支持。
- 相比于其他开源的序列化框架,Java序列化后的码流太大,无论是网络传输还是持久化到磁盘,都会导致额外的资源占用。
速度方面:
序列化后大小方面:
其他序列化方式主要有:protobuf和protostuff,hessian等
Hessian比JSON性能要高,但对java一些常见的对象类型不支持,如Linked系列、Locale类等等
Protobuf是由谷歌公司开发的数据语言,支持java、C++、python等多平台,序列化后体积较小,转化性能较高。但需要预编译IDL。
Protostuff 不需要依赖 IDL 文件,可以直接对 Java 领域对象进行反/序列化操作,在效率上跟 Protobuf 差不多,生成的二进制格式和 Protobuf 是完全相同的,可以说是一个 Java版本的 Protobuf 序列化框架。但不支持null,也不支持单纯的 Map、List 集合对象,需要包在对象里面。