Netty札记-编解码框架

1. 背景

1.1. 编解码技术
通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输、数据持久化或者其它用途。

反之,解码(Decode)/反序列化(deserialization)把从网络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷贝),以方便后续的业务逻辑操作。

编解码框架有哪些
Java序列化

Serializable

优点
使用简单,开发门槛低

缺点

  • 无法跨语言
  • 序列化后的码流太大
  • 序列化效率差

由于它自身存在很多缺点,因此大多数的RPC框架并没有选择它。

XML

优点:人机可读性好,可指定元素或特性的名称。

缺点:

  • 序列化数据只包含数据本身以及类的结构,不包括类型标识和程序集信息;
  • 只能序列化公共属性和字段;不能序列化方法;
  • 文件庞大,文件格式复杂,传输占带宽。适用场景:
  • 当做配置文件存储数据,实时数据转换。
JSON

优点:

  • 兼容性高
  • 数据格式比较简单
  • 易于读写
  • 序列化后数据较小
  • 可扩展性好兼容性好
  • 与XML相比,其协议比较简单,解析速度比较快。

缺点:

  • 数据的描述性比XML差、不适合性能要求为ms级别的情况、
  • 额外空间开销比较大。

适用场景(可替代XML):

  • 跨防火墙访问、可调式性要求高、
  • 基于Web browser的Ajax请求、传输数据量相对小,
  • 实时性要求相对低(例如秒级别)的服务。
Google的Protobuf

它将数据结构以.proto文件进行描述,通过代码生成工具可以生成对应数据结构的POJO对象和Protobuf相关的方法和属性。

它的特点如下:

  • 结构化数据存储格式(XML,JSON等);
  • 高效的编解码性能;
  • 语言无关、平台无关、扩展性好;
  • 官方支持Java、C++和Python三种语言。
Apache的Thrift

Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的内部数据传输,相对于JSON和XML在性能和传输大小上都有明显的优势。

JBoss Marshalling

JBoss Marshalling是一个Java对象的序列化API包,修正了JDK自带的序列化包的很多问题,但又保持跟java.io.Serializable接口的兼容;同时增加了一些可调的参数和附加的特性,并且这些参数和特性可通过工厂类进行配置。
相比于传统的Java序列化机制,它的优点如下:

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

相比于前面介绍的两种编解码框架,JBoss Marshalling更多是在JBoss内部使用,应用范围有限。

Netty编码解码技术

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值