编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二对象持久化。
虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤比较多,比如java序列化没办法跨语言,序列化后码流太大,序列化性能太低等等。。
主流的编解码框架:
JBoss的Marshalling包
google的Protobuf
基于Protobuf的Kyro
MessagePack框架
现在我们使用JBoss的Marshalling进行编解码
JBoss Marshalling是一个java对象序列化包,对JDK默认的序列化框架进行了优化,但有保持跟java.io.Serializable接口兼容,同时增加了一些可调的参数和附加特性,
类库:jboss-marshalling-1.3.0 、jboss-marshalling-serial-1.3.0
下载地址:https://www.jboss.org/jbossmarshalling/downloads
Jboss Marshalling与Netty结合后进行序列化对象的代码编写非常简单,下面看一个demo:
首先,新建一个编解码的工厂类:
在这一次通信的时候,不再传输字符串,该成传输对象,这两个对象分别是Request和Response,看一下这两个类:
下面看一下Server端的实现:
Server端就是加了Marshalling的编解码,没有加其他的东西,
下面看一下ServerHandler:
这边把对象转换成Request对象,然后把对象的内容打印出来,同时返回给客户端Response对象,
下面看一下Client端代码:
这部分的代码同Server端的代码类似,看一下启动时,Client端往Server端发送的数据
这边将发送req对象,进行两端的通信,需要注意的是,在Server端和Client端的对象的位置要完全一样,内容也要完全一样,包名也是一样的,不然将会解析失败;
下面看一下运行的结果:
看一下Server端打印结果:
看一下Client端打印的结果
这只是其中一种编解码技术,其他几种也都很简单。