messagePack编解码
首先引入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编解码的更多相关文章
- netty权威指南学习笔记六——编解码技术之MessagePack
编解码技术主要应用在网络传输中,将对象比如BOJO进行编解码以利于网络中进行传输.平常我们也会将编解码说成是序列化/反序列化 定义:当进行远程跨进程服务调用时,需要把被传输的java对象编码为字节数组 ...
- Netty 编解码技术 数据通信和心跳监控案例
Netty 编解码技术 数据通信和心跳监控案例 多台服务器之间在进行跨进程服务调用时,需要使用特定的编解码技术,对需要进行网络传输的对象做编码和解码操作,以便完成远程调用.Netty提供了完善,易扩展 ...
- Netty编解码技术
编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二对象持久化. 虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤比较多,比如java序 ...
- Netty--JDK序列化编解码传输对象
使用JDK序列化不需要额外的类库,只需要实现Serializable即可,但是序列化之后的码流只有Java才能反序列化,所以它不是跨语言的,另外由于Java序列化后码流比较大,效率也不高,所以在RPC ...
- 【转】Netty系列之Netty编解码框架分析
http://www.infoq.com/cn/articles/netty-codec-framework-analyse/ 1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称 ...
- Netty入门系列(3) --使用Netty进行编解码的操作
前言 何为编解码,通俗的来说,我们需要将一串文本信息从A发送到B并且将这段文本进行加工处理,如:A将信息文本信息编码为2进制信息进行传输.B接受到的消息是一串2进制信息,需要将其解码为文本信息才能正常 ...
- Netty编解码技术和UDP实现
背景 作为网络传输框架,免不了传输对象,对象在传输之前就要序列化,这个序列化的过程就是编码过程.接收到编码后的数据就需要解码,还原传输的数据. 编解码技术就是java序列化技术,序列化的目的有两个,一 ...
- Netty系列之Netty编解码框架分析
1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途. 反之,解码(Decod ...
- 企业级工作流解决方案(七)--微服务Tcp消息传输模型之消息编解码
Tcp消息传输主要参照surging来做的,做了部分裁剪和改动,详细参见:https://github.com/dotnetcore/surging Json-rpc没有定义消息如何传输,因此,Jso ...
随机推荐
- ubuntu安装QQ目前最完善的方法!(亲测,成功)
wine qq 2012 for linux Ubuntu 64位兼容(12月21日末日版) 由 smile » 2011-04-07 9:08 +-------------------------- ...
- php 微信开发之 微信支付 V3 开发 -CURLOP_TIMEOUT问题
如果不懂怎么配置的话请看文章 php 微信开发之 微信支付配置 基本配置后在继续本文章的开发 . 本文章就先继续基本的实现!也并不困难.我大概的思路的返回购买者的唯一id 和 订单号的唯一 id 就2 ...
- Django的templates模版
前面介绍的都是django.http.HttpResponse 把内容直接返回到网页上,这次介绍通过渲染模版的方法来显示内容 步骤: 1.创建一个项目(略) 2.创建一个app(略) 3.添加项目到s ...
- 50个C++源码学习网站
C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 .这份清单提供了源代码的链接以及它们的小说明.我已尽力包括最佳的C/C++源代码的网站.这不是一个完整的 ...
- 进程、线程、GDI+、XML、委托
进制 表示某一位置上的数运算时是逢X进一位.二进制就是逢二进一, 十进制是逢十进一,十六进制是逢十六进一,以此类推. so:二进制001010101只有0和1计算机中的数据都是二进制表示,四进制以0. ...
- EXTJS 4.2 资料 控件之Grid Columns 列renderer 绑定事件
columns: [ { header: '序号', xtype: 'rownumberer', align: 'center', width: 100 }, { header: 'CompanyId ...
- iOS通过http post上传图片 (转)
转载自:http://www.cocoachina.com/bbs/read.php?tid=89985 由于iOS无法通过html表单来上传图片,因此想要上传图片,必须实现http请求,而不能像其他 ...
- bnuoj 31796 键盘上的蚂蚁(搜索模拟)
http://www.bnuoj.com/bnuoj/contest_show.php?cid=2876#problem/31796 [题意]: 如题,注意大小写情况 [code]: #include ...
- java第三课:分支结构、循环结构
分支结构 1.if后面可以不加{},但是不建议,容易产生误解2.写程序的时候先防屌丝测试,再写逻辑,否则会出错3.if:一条分支 if else:两条分支 if...else if...:多条分支(结 ...
- php如何查找会员无限分类的所有上级和所有下级
a推广出的a-1,a-2继续推广,得到a-1-1,a-1-2等等数据库设计思路如下:用户表中有一个son这么一个字段,这个字段中存放名下所有会员的id,用分号隔开.这个字段的维护:比如a-1-1推广出 ...