从java序列化来聊聊目前流行的几个编解码框架

本章我们不讲代码纯粹的来聊聊序列化相关的知识和介绍各种序列化工具。

我们为什么要序列化

举个例子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放。那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列化。我们要用的时候,就需要将字节流重构成对象,这叫反序列化。不知道我这么说大家能不能理解。

java序列化的缺点

java自己提供序列化而且用起来也非常简单,但是在远程服务调用中很少用它,主要存在以下缺点:

1.无法跨语言。这应该是java序列化最致命的问题了。由于java序列化是java内部私有的协议,其他语言不支持,导致别的语言无法反序列化,这严重阻碍了它的应用。
2.序列后的码流太大。java序列化的大小是二进制编码的5倍多!
3.序列化性能太低。java序列化的性能只有二进制编码的6.17倍,可见java序列化性能实在太差了。

总结 我们判断一个编码框架的优劣主要从以下几个方面:

1.是否支持跨语言,支持语种是否丰富
2.编码后的码流
3.编解码的性能
4.类库是否小巧,API使用是否方便
5.使用者开发的工作量和难度。

对比一下,java的前3条变现太差,导致在远程服务调用中很少用它。下面我们介绍几个流行的编解码框架。

几个流行的编解码框架

1.google的Protobuf

Protobuf是google开源的项目,全称 Google Protocol Buffers.特点:

1.结构化数据存储格式(xml,json等)
2.高性能编解码技术
3.语言和平台无关,扩展性好
4.支持java,C++,Python三种语言。

2.faceBook的Thrift

Thrift源于faceBook,2007年facebook将Thrift做为一个开源项目交给了apache基金会。特点:

1.Thrift支持多种语言(C++,C#,Cocoa,Erlag,Haskell,java,Ocami,Perl,PHP,Python,Ruby,和SmallTalk)
2.Thrift适用了组建大型数据交换及存储工具,对于大型系统中的内部数据传输,相对于Json和xml在性能上和传输大小上都有明显的优势。
3.Thrift支持三种比较典型的编码方式。(通用二进制编码,压缩二进制编码,优化的可选字段压缩编解码)

3.JBoss Marshlling介绍

JBoss Marshalling是一个java对象的序列化API包,修正了java自带的序列化包的很多问题,但又保持跟java.io.Serializable接口的兼容,同时又增加了一些可调的参数和附加特性,并且这些参数和特性可通过工厂类的配置,,很强大啊有木有。特点:

1.可拔插的类解析器,提供更加便捷的类加载定制策略,通过一个接口即可实现定制。
2.可拔插的对象替换技术,不需要通过继承的方式。
3.可拔插的预定义类缓存表,可以减少序列化的字节数组长度,提升常用类型的对象序列化性能。
4.无须实现java.io.Serializable接口
5.通过缓存技术提升对象的序列化性能。
6.使用非常简单

结尾

好了就到这里吧,后面会慢慢讲到,坚持就会有奇迹,加油!

你可能感兴趣的:(netty学习)