其他序列化对比

发表时间:2017-10-27 09:57:25 浏览量( 16 ) 留言数( 0 )

学习目标:

1、了解一下其他序列化。

2、了解各个序列化的对比


学习过程:

    在网络传输时,数据必须时字节码才能传输,所以把数据和字节码之间的转换的效率直接影响了网络传输的效率,序列化和反序列化是在应对网络编程最常遇到的问题之一,主要考虑的有两个方面:1、编码后的大小,2、编码的效率。Java原生的序列化性能一直比较低,所以目前有很多其他的替换技术,这些技术比使用原生的Java序列化大小较少好多倍,效率也提升率额不少。

下面时一些比较场景的序列化技术

    Kryo 速度快,序列化后体积小,跨语言支持较复杂,是一个快速高效的Java序列化框架,旨在提供快速、高效和易用的API。无论文件、数据库或网络数据Kryo都可以随时完成序列化。Kryo还可以执行自动深拷贝(克隆)、浅拷贝(克隆)。这是对象到对象的直接拷贝,非对象->字节->对象的拷贝。

    Hessian 默认支持跨语言,效率较慢,是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

    Protostuff Google 的protobuf是一个优秀的序列化工具,跨语言、快速、序列化后体积小。protobuf的一个缺点是需要数据结构的预编译过程,首先要编写.proto格式的配置文件,再通过protobuf提供的工具生成各种语言响应的代码。由于java具有反射和动态代码生成的能力,这个预编译过程不是必须的,可以在代码执行时来实现。

    Protostuff-Runtime 无需静态编译,但序列化前需预先传入schema,不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值

    Java 使用方便,可序列化所有类,速度慢,占空间

    网上也有很多对比的测试,这里我就不一一的去对比了,如果不需要考虑跨语言的化,可以使用Kryo 和 Hessian相对容易一点。


字节化后对比:



效率对比: