Kryo框架的获取、基本应用例子

4 篇文章 0 订阅

      Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,进入此页面,然后点击右边的Download Zip按钮,就能下载到最新版本的Kryo框架。


     导入Eclipse时,记得JDK/JRE选用 JDK1.7版本,因为Kryo会引用到unsafe()对象的一些方法JDK1.7才兼容。。


     先来一个String类的序列化跟还原,是不是很简单?

</pre><pre name="code" class="java">	private static void testString () {
		Kryo kryo=new Kryo();
		String w_str1="简体中文,繁體中文,English";
		
		//把w_str1对象序列化
		Output output=new Output(1024);
		kryo.writeObject(output, w_str1);
		output.flush();
		output.close();
		byte[] w_ret= output.toBytes(); //获得byte数据,这些数据可用作储存、网络传输等...
		
		//还原
		Input input=new Input(w_ret);
		input.close();
		String w_str2=kryo.readObject(input, String.class);
		System.out.println(w_str2);
	}


   再来一个HashMap类的序列化跟还原,因为Kryo自带了很多java基本类的Serializer,所以尽管不知道Serializer,Kryo也会自动匹配:

public static void testHashMap() throws NoSuchAlgorithmException{
		Kryo kryo=new Kryo();			
		HashMap h=new HashMap();
		h.put("k1", "v1");
		h.put("k2", "v2");
		Output output=new Output(1, 1024);		
		kryo.writeObject(output, h);
		output.close();
		byte[] data=output.toBytes();
		
		Input i=new Input(data);
		i.close();
		HashMap h2= (HashMap)kryo.readObject(i, HashMap.class);
		System.out.println(h2.get("k2"));		
	}


   那么,我自定义的Bean又应该如何处理呢?下面给出例子:

1、先定义Bean TestBean:

public static class TestBean implements Serializable{
		private int[] intArray;
		private HashMap<String,String> hashMapVal;
		private String strVal;
		public int[] getIntArray () {
			return intArray;
		}
		public void setIntArray (int[] intArray) {
			this.intArray = intArray;
		}
		public HashMap<String, String> getHashMapVal () {
			return hashMapVal;
		}
		public void setHashMapVal (HashMap<String, String> hashMapVal) {
			this.hashMapVal = hashMapVal;
		}
		public String getStrVal () {
			return strVal;
		}
		public void setStrVal (String strVal) {
			this.strVal = strVal;
		}
	}


    2、因为这是自定义的Bean,Kryo在序列化前先要对TestBean进行注册:kryo.register(TestBean.class,new BeanSerializer(kryo, TestBean.class)); ,具体例子如下:

public static void testBean() throws NoSuchAlgorithmException{
		Kryo kryo=new Kryo();
		kryo.register(TestBean.class,new BeanSerializer(kryo, TestBean.class));
		 		
		TestBean tb1=new TestBean();
		tb1.setStrVal("test1");
		tb1.setHashMapVal(new HashMap<String,String>());
		tb1.getHashMapVal().put("k1", "v1");
		tb1.getHashMapVal().put("k2", "v2");
		int[] ints=new int[3];
		ints[0]=1;
		ints[1]=2;
		ints[2]=3;
		tb1.setIntArray(ints);
		
		Output output=new Output(1, 1024);		
		kryo.writeObject(output, tb1);
		output.close();
		byte[] data=output.toBytes();
		
		Input i=new Input(data);
		i.close();
		TestBean tb2= (TestBean)kryo.readObject(i, TestBean.class);
		System.out.println(tb2.strVal);
		System.out.println(tb2.hashMapVal.get("k1"));
		System.out.println(tb2.intArray[2]);				
	}



是不是非常简单?好了,下一篇文章讲述如何在序列化的同时进行数据的加密。。。


转载请注明出处:http://blog.csdn.net/rocklee

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值