Netty权威指南 第2版学习笔记6——常见序列化与反序列化框架

本文对比了Google的protobuf、Facebook的Thrift和JBossMarshalling等主流编解码框架的特点与应用场景。protobuf具备高效的编解码性能和良好的跨语言支持;Thrift适用于搭建大型数据交换及存储的通用工具,在性能和传输大小方面优于JSON和XML;而JBossMarshalling则针对Java对象序列化进行了优化。

java.io.Serializable 实现了Java的序列化,但有无法跨语言、序列化后的码流太大、序列化性能太低等缺点

业界主流的编解码框架

Google的protobuf

由谷歌开源而来,将数据结构以.proto文件进行描述,通过代码生成工具可以生成对应数据结构的POJO对象和Protobuf相关的方法和属性。
特点如下:

  • 结构化数据存储格式(XML、JSON等)
  • 高效的编解码性能
  • 语言无关、平台无关、扩展性好
  • 官方支持Java、C++和Python三种语言
    Protobuf使用二进制编码,在空间和性能上比XML具有更大的优势。

Facebook的Thrift

源于Facebook,支持多种程序,如C++、C#、Cocoa、Erlang、Haskell、Java、Ocami、Perl、PHP、Python、Ruby和Smalltalk。
在多种不同的语言之间通信,Thrift可以作为高性能的通信中间件使用,它支持数据(对象)序列化和多种类型的RPC服务。Thrift适用于静态的数据交换,需要先确定好它的数据结构,当数据结构发生变化时,必须重新编辑IDL文件,生成代码和编译。这一点跟其它IDL工具相比可以视为是Thrift的弱项。Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的内部数据传输,相对于JSON和XML在性能和传输大小都有明显的优势 。

Thrift主要有5部分组成

  • 语言系统以及IDL编译器:负责由用户给定的IDL文件生成相应语言的接口代码
  • TProtocol:RPC的协议层,可以选择多种不同的对象序列化方式,如JSON和Binary
  • TTransport:RPC的传输层,同样可以选择不同的传输层实现,如socket、NIO、MemoryBuffer等
  • TProcessor:作为协议层和用户提供的服务实现之间的纽带,负责调用服务实现的接口
  • TServer:聚合TProtocol、TTransport和TProcessor等对象

我们重点关注的是编解码框架,与之对应的就是TProtocol。由于 Thrift的RPC服务调用和编解码框架绑定在一起,所以通常使用Thrift的时候会采取RPC框架的方式,但是它的TProtocol编解码框架还是可以以类库的方式独立使用。

JBoss Marshalling

是一个Java对象的序列化API包,修正了JDK自带的序列化包的很多问题,但又保持跟java.io.Serializable接口的兼容,同时,增加了一些可调的参数和附加的特性,并且这些参数和特性可通过工厂类进行配置。
相比于前两种方案,JBoss Marshalling更多是在JBoss内部使用,应用范围有限。其使用非常简单。

其它方案

Kryyo

Hessian

FST fast-serialization

MessagePack(下一章介绍)

http://blog.csdn.net/xundh/article/details/53979114

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值