首先引入javassist-3.20.0-GA.jar与msgpack-0.6.12.jar两个包,然后就可以使用.

 package com.ming.netty.code;

 import java.io.Serializable;
import java.nio.ByteBuffer; /**
* 一个普通学生类
* @author mingge
*
*/
public class Student implements Serializable{
private static final long serialVersionUID = 1L; private String stuName; public String getStuName() {
return stuName;
} public void setStuName(String stuName) {
this.stuName = stuName;
} public byte[] codeC(){
ByteBuffer buffer=ByteBuffer.allocate(1024);
byte[] value=this.getStuName().getBytes();
buffer.putInt(value.length);
buffer.put(value);
buffer.flip();
value=null;
byte[] result=new byte[buffer.remaining()];
buffer.get(result);
return result;
} }
 package com.ming.netty.code;

 import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; import org.msgpack.MessagePack;
import org.msgpack.template.Templates; public class TestMsgPack { public static void main(String[] args) throws Exception{
List<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c"); ByteArrayOutputStream bos=new ByteArrayOutputStream();
ObjectOutputStream os=new ObjectOutputStream(bos);
os.writeObject(list);
os.flush();
os.close();
byte[] b=bos.toByteArray();
System.out.println("list的jdk序列化长度:"+b.length); MessagePack msgpack=new MessagePack();
byte[] bytes=msgpack.write(list);//序列化编码
System.out.println("list的msgpack序列化长度:"+bytes.length); List<String> dst=msgpack.read(bytes,Templates.tList(Templates.TString));//反序列化
System.out.println("反序列化获取的值:"+dst.get(0)); Teacher t=new Teacher();
t.setNo(1);
t.setName("张三");
t.setSex("男");
MessagePack msgpack1=new MessagePack();
byte[] bytes1=MessagePack.pack(t);//序列化编码
System.out.println("teacher序列化长度:"+bytes1.length); Teacher t1=msgpack1.read(bytes1, Teacher.class);
System.out.println("t1的值:"+t1.getName());
}
}

运行结果集:

list的jdk序列化长度:70
list的msgpack序列化长度:7
反序列化获取的值:a
teacher序列化长度:13
t1的值:张三

显然msgpack的序列化比jdk序列化要好一点.

messagePack编解码的更多相关文章

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

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

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

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

  3. Netty编解码技术

    编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二对象持久化. 虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤比较多,比如java序 ...

  4. Netty--JDK序列化编解码传输对象

    使用JDK序列化不需要额外的类库,只需要实现Serializable即可,但是序列化之后的码流只有Java才能反序列化,所以它不是跨语言的,另外由于Java序列化后码流比较大,效率也不高,所以在RPC ...

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

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

  6. Netty入门系列(3) --使用Netty进行编解码的操作

    前言 何为编解码,通俗的来说,我们需要将一串文本信息从A发送到B并且将这段文本进行加工处理,如:A将信息文本信息编码为2进制信息进行传输.B接受到的消息是一串2进制信息,需要将其解码为文本信息才能正常 ...

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

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

  8. Netty系列之Netty编解码框架分析

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

  9. 企业级工作流解决方案(七)--微服务Tcp消息传输模型之消息编解码

    Tcp消息传输主要参照surging来做的,做了部分裁剪和改动,详细参见:https://github.com/dotnetcore/surging Json-rpc没有定义消息如何传输,因此,Jso ...

随机推荐

  1. 如何在IOS开发中在自己的framework中添加.bunble文件

    今天就跟大家介绍一下有关,如何在IOS开发中在自己的framework中添加.bunble文件,该文章我已经在IOS教程网(http://ios.662p.com)发布过来,个人觉得还是对大家有帮助的 ...

  2. web网页的表单排版利器--960css

    表单排版样式 960css 前言 一般web网页的表单排版,大家都习惯用table排版,自己需要根据实际需要去定义TR和TD,很多时候对于TD的高宽度.是否合并行,合并列,都要去做一些处理,这些都是比 ...

  3. 表格细边框 并且CSS3加圆角

    .YJ table{width:625px;height:860px;text-align:center;overflow:hidden; background:#fff;border-radius: ...

  4. MD5加密简单算法

    public partial class MD5运用 : Form { public MD5运用() { InitializeComponent(); } private void btnChange ...

  5. js 闭包 详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数 ...

  6. 简单风格 在线音乐播放器(支持wav,MP3等)

    找了两天终于找到了,支持wav,MP3,其他格式没有测试. 1.修复了jQuery判断ie的bug, 2.修复播放循环 下载地址: http://pan.baidu.com/s/1o6upwHs

  7. 手工添加Linux防火墙端口

    在linux实际操作中经常需要对防火墙进行修改,比如经常要修改或添加相关端口,下面以添加运行Tomcat所需8080端口为例: (以下命令操作均为root用户) 1.编辑iptables文件 # vi ...

  8. Hello Stacked Column Chart

    <navigation:Page xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/to ...

  9. 详解Javascript中的Array对象

    基础介绍 创建数组 和Object对象一样,创建Array也有2种方式:构造函数.字面量法. 构造函数创建 使用构造函数的方式可以通过new关键字来声明,如下所示: 12 var arr = new ...

  10. MySQL 5.1.63 单机配置多实例(简单配置)

    需求: 在一台服务器上通过源码编译安装一个版本为5.1.63版本MySQL数据库: 方案:将所有配置文件与数据等均存放在/home/zhaoshuangshuang下.在同一个MySQL中运行两个实例 ...