序列化方式
来细数一下目前知道的序列化方式
- java默认序列化:无法跨语言、序列化后太大且序列化性能差
- XML:可读性好,但是数据中包含了过多的标签,导致序列化后大且格式复杂,常用于配置文件和数据转换
- JSON:轻量级的数据格式,兼容性好、数据格式简单且序列化后数据还算小,解析速度也比XML快,只是可读性没有XML好,可以替代XML。性能不适合ms级的情况。常用于小数据量传输,可满足秒级服务
- Thrift:不仅是序列化方式还是一个RPC框架,序列化后体积小、速度快、支持多种语言和丰富的数据类型、对于数据字段的增删有较强的兼容性,但是不具有可读性且不能与其他传输层协议如HTTP共同使用,无法支持向持久层直接读写数据,不适合做数据持久化序列化协议,常用于作为分布式系统的RPC解决方案
- Avro:支持丰富的数据类型、简单地动态语言结合功能、具有自我描述属性、提高了数据解析速度,可以实现RPC且支持跨语言实现,在Hadoop中做hive、pig的持久化数据格式
- Protobuf:将数据结构以.proto文件进行描述,通过代码生成工具可以生成对应的数据结构的POJO对象和Protobuf相关的方法和属性,序列化后比较小,性能高,通过标识字段的顺序可以实现协议的前向兼容,只不过依赖于工具生成代码且支持的语言较少,如果是对于性能要求比较高的RPC调用可以使用该方式
- protostuff:基于protobuf,不需要配置proto文件
- Hessian:采用二进制协议的轻量级remoting on http工具
- kryo:基于protobuf,只支持java语言,需要注册,然后序列化和反序列化