编解码技术,说白了就是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端打印的结果

 

这只是其中一种编解码技术,其他几种也都很简单。

 

posted on 2017-07-03 15:34  小~虎  阅读(186)  评论(0编辑  收藏  举报