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

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

Netty编解码技术的更多相关文章

  1. Netty 编解码技术 数据通信和心跳监控案例

    Netty 编解码技术 数据通信和心跳监控案例 多台服务器之间在进行跨进程服务调用时,需要使用特定的编解码技术,对需要进行网络传输的对象做编码和解码操作,以便完成远程调用.Netty提供了完善,易扩展 ...

  2. Netty编解码技术和UDP实现

    背景 作为网络传输框架,免不了传输对象,对象在传输之前就要序列化,这个序列化的过程就是编码过程.接收到编码后的数据就需要解码,还原传输的数据. 编解码技术就是java序列化技术,序列化的目的有两个,一 ...

  3. Netty学习(九)-Netty编解码技术之Marshalling

    前面我们讲过protobuf的使用,主流的编解码框架其实还有很多种: ①JBoss的Marshalling包 ②google的Protobuf ③基于Protobuf的Kyro ④Apache的Thr ...

  4. Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍

    在前几节我们学习过处理粘包和拆包的问题,用到了Netty提供的几个解码器对不同情况的问题进行处理.功能很是强大.我们有没有去想这么强大的功能是如何实现的呢?背后又用到了什么技术?这一节我们就来处理这个 ...

  5. java编解码技术,netty nio

    对于java提供的对象输入输出流ObjectInputStream与ObjectOutputStream,可以直接把java对象作为可存储 的字节数组写入文件,也可以传输到网络上去.对与java开放人 ...

  6. Netty 源码 ChannelHandler(四)编解码技术

    Netty 源码 ChannelHandler(四)编解码技术 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.拆包与粘 ...

  7. netty权威指南学习笔记六——编解码技术之MessagePack

    编解码技术主要应用在网络传输中,将对象比如BOJO进行编解码以利于网络中进行传输.平常我们也会将编解码说成是序列化/反序列化 定义:当进行远程跨进程服务调用时,需要把被传输的java对象编码为字节数组 ...

  8. (中级篇 NettyNIO编解码开发)第六章-编解码技术

    基于Java提供的对象输入/输出流ObjectlnputStream和ObjectOutputStream,可以直接把Java对象作为可存储的字节数组写入文件,也可以传输到网络上.对程序员来说,基于J ...

  9. 【转】Netty系列之Netty编解码框架分析

    http://www.infoq.com/cn/articles/netty-codec-framework-analyse/ 1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称 ...

随机推荐

  1. springboot 多环境选择

    1.配置开发环境(开发环境) 2. application.yml  环境选择 3.cmd  切换环境 4. 设置环境调用方法 5. 另一方法

  2. Spring boot 自定义starter

    以下配置来自尚硅谷.. 常用如何配置 @Configuration //指定这个类是一个配置类 @ConditionalOnXXX //在指定条件成立的情况下自动配置类生效 @AutoConfigur ...

  3. YUV420格式解析<转>

    在YUV420中,一个像素点对应一个Y,一个2X2的小方块对应一个U和V.对于所有YUV420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图像. YUV420sp与YUV420p的数据格 ...

  4. jq时间戳动画

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. BBS-基于forms组件和ajax实现注册功能

    http://www.cnblogs.com/yuanchenqi/articles/7638956.html 1.设计注册页面 views.py from django import forms c ...

  6. APP-9.1-百度应用-文字识别

    1.创建应用-文字识别 https://console.bce.baidu.com/ai/#/ai/ocr/app/list 尽量勾选:文字识别.百度语音.图像设别.人脸识别.图像搜索 2.获取Acc ...

  7. Netty - 1

    Netty设计特点: 1. io线程模型 使用reactor模式,同步非阻塞.这决定了可以用最少的资源做更多的事. 2. 内存零拷贝 使用直接缓存 3. 内存池设计 申请的内存可以重用,主要指直接内存 ...

  8. postman 请求种添加用户权限

    1. 打开postman, 在Tests输入以下内容: var jsonData =JSON.parse(responseBody);//获取body中返回的所有参数 postman.setGloba ...

  9. 尚硅谷springboot学习10-@PropertySource,@ImportResource,@Bean

    @PropertySource 使用指定的属性文件而不一定是application.xxx 同样可以注入相关内容 @ImportResource 导入Spring的配置文件,让配置文件里面的内容生效: ...

  10. scala case类

    case类 case class Person(name:String) case 类有如下特点: 1. 构造参数默认是 val 的. 2. case 类实例化对象的时候,不需要 new 关键字.因为 ...