msgpack

[size=large]msgpack简介
MessagePack是一个基于二进制高效的对象序列化Library用于跨语言通信。
它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。
支持Python、Ruby、Java、C/C++、Javascript等众多语言。
比Google Protocol Buffers还要快4倍

1. 下载 msgpack-0.5.1-devel.jar
建议从Maven仓库下 可能依赖的 jar
slf4j-api-1.4.3.jar
slf4j-log4j12-1.4.3.jar
log4j-1.2.13.jar
javassist-3.12.1.GA.jar
[/size]
[size=large]2. 对JavaBean操作[/size]

package com.mytest;

/**
*
* 功能描述:
*
* @author lw
* @created 2011-6-9 下午01:55:29
* @version 1.0.0
* @date 2011-6-9 下午01:55:29
*/

import java.io.Serializable;

import org.msgpack.annotation.MessagePackMessage;

@MessagePackMessage
// Annotation
public class BeanClass implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;

// public fields are serialized.
public String str;
public double num;
public String info;
}



package com.mytest;

/**
*
* 功能描述:
*
* @author lw
* @created 2011-6-9 下午01:55:29
* @version 1.0.0
* @date 2011-6-9 下午01:55:29
*/
import java.util.HashMap;

import org.msgpack.MessagePack;

public class BeanMain {

public static void main(String[] args) {
BeanClass src = new BeanClass();
src.str = "msgpack";
src.num = 0.5;
src.info = "This is msgpack";
HashMap<String, String> map = new HashMap<String, String>();
map.put("src", "src----");

// Serialize
byte[] raw = MessagePack.pack(src);

// Deserialize
BeanClass dst = MessagePack.unpack(raw, BeanClass.class);
System.out.println(dst.str + ":" + dst.num);
}
}

[size=large]3. 对Map,List操作[/size]

package com.mytest;

import static org.msgpack.Templates.TAny;
import static org.msgpack.Templates.TString;
import static org.msgpack.Templates.tList;
import static org.msgpack.Templates.tMap;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.msgpack.MessagePack;
import org.msgpack.Template;
import org.msgpack.object.ArrayType;
import org.msgpack.object.BooleanType;
import org.msgpack.object.FloatType;
import org.msgpack.object.IntegerType;
import org.msgpack.object.RawType;

/**
*
* 功能描述:
*
* @author lw
* @created 2011-6-13 上午09:33:11
* @version 1.0.0
* @date 2011-6-13 上午09:33:11
*/

public class RawTypeUtil {

/**
*
* Object
*
* @param arg0
* @return
*/
public static Object unpackToObject(byte[] arg0) {
return unpackToObject(arg0, TAny);
}

/**
*
* Object
*
* @param arg0
* @param arg1
* @return
*/
public static Object unpackToObject(byte[] arg0, Template arg1) {
Object obj = (Object) MessagePack.unpack(arg0, arg1);
return rawObjToObj(obj);
}

/**
*
* Map
*
* @param arg0
* @return
*/
public static Map<String, Object> unpackToMap(byte[] arg0) {
return unpackToMap(arg0, tMap(TString, TAny));
}

/**
*
* Map
*
* @param arg0
* @param arg1
* @return
*/
public static Map<String, Object> unpackToMap(byte[] arg0, Template arg1) {
@SuppressWarnings("unchecked")
Map<String, Object> dst = (Map<String, Object>) MessagePack.unpack(arg0, arg1);
return rawtypeMapConvert(dst);
}

/**
*
* List
*
* @param arg0
* @return
*/
public static List<Map<String, Object>> unpackToList(byte[] arg0) {
return unpackToList(arg0, tList(tMap(TString, TAny)));
}

/**
*
* List
*
* @param arg0
* @param arg1
* @return
*/
public static List<Map<String, Object>> unpackToList(byte[] arg0, Template arg1) {
@SuppressWarnings("unchecked")
List<Map<String, Object>> dst = (List<Map<String, Object>>) MessagePack.unpack(arg0, arg1);
return rawtypeListConvert(dst);
}

private static List<Map<String, Object>> rawtypeListConvert(final List<Map<String, Object>> list) {
List<Map<String,Object>> rList = new ArrayList<Map<String,Object>>();
Map<String, Object> map = new HashMap<String, Object>();
for(Map<String, Object> s : list) {
map = rawtypeMapConvert(s);
rList.add(map);
}
return rList;
}

private static Map<String, Object> rawtypeMapConvert (
final Map<String, Object> params) {
Map<String, Object> rParams = new HashMap<String, Object>(0);
Iterator<String> iterator = params.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
Object objResu = rawObjToObj(params.get(key));
rParams.put(key, objResu);
}
return rParams;
}

private static Object rawObjToObj(Object obj) {
Object objResu = null;
if (obj instanceof IntegerType) {
objResu = ((IntegerType) obj).asInt();
} else if (obj instanceof ArrayType) {
objResu = ((ArrayType) obj).asArray();
} else if (obj instanceof BooleanType) {
objResu = ((BooleanType) obj).asBoolean();
} else if (obj instanceof FloatType) {
objResu = ((FloatType) obj).asFloat();
} else {
objResu = ((RawType) obj).asString();
}
return objResu;
}
}




package com.mytest;

import java.util.HashMap;
import java.util.Map;

import org.msgpack.MessagePack;

/**
*
* 功能描述:
*
* @author lw
* @created 2011-6-13 上午09:12:07
* @version 1.0.0
* @date 2011-6-13 上午09:12:07
*/

public class MapMain {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("t", "aa1");
map.put("f", 111);

byte[] raw = MessagePack.pack(map);

map = RawTypeUtil.unpackToMap(raw);
System.out.println(map.get("t").toString() + " : "
+ map.get("f").toString());
}
}




package com.mytest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.msgpack.MessagePack;

/**
*
*
* 功能描述:
*
* @author lw
* @created 2011-6-13 上午09:12:30
* @version 1.0.0
* @date 2011-6-13 上午09:12:30
*/
public class ListMain {

public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("t", "aa1");
map1.put("f", 111);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("t", "aa2");
map2.put("f", 333);
list.add(map1);
list.add(map2);

byte[] raw = MessagePack.pack(list);
List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
rList = RawTypeUtil.unpackToList(raw);
for (Map<String, Object> s : rList) {
System.out.println(s.get("t") + " : " + s.get("f"));
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值