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

来源:互联网 发布:英属哥伦比亚大学知乎 编辑:程序博客网 时间:2024/05/21 22:35

原文链接:http://blog.csdn.net/rocklee/article/details/26451739


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


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


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

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. </pre><pre name="code" class="java">    private static void testString () {  
  2.         Kryo kryo=new Kryo();  
  3.         String w_str1="简体中文,繁體中文,English";  
  4.           
  5.         //把w_str1对象序列化  
  6.         Output output=new Output(1024);  
  7.         kryo.writeObject(output, w_str1);  
  8.         output.flush();  
  9.         output.close();  
  10.         byte[] w_ret= output.toBytes(); //获得byte数据,这些数据可用作储存、网络传输等...  
  11.           
  12.         //还原  
  13.         Input input=new Input(w_ret);  
  14.         input.close();  
  15.         String w_str2=kryo.readObject(input, String.class);  
  16.         System.out.println(w_str2);  
  17.     }  


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

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public static void testHashMap() throws NoSuchAlgorithmException{  
  2.         Kryo kryo=new Kryo();             
  3.         HashMap h=new HashMap();  
  4.         h.put("k1""v1");  
  5.         h.put("k2""v2");  
  6.         Output output=new Output(11024);        
  7.         kryo.writeObject(output, h);  
  8.         output.close();  
  9.         byte[] data=output.toBytes();  
  10.           
  11.         Input i=new Input(data);  
  12.         i.close();  
  13.         HashMap h2= (HashMap)kryo.readObject(i, HashMap.class);  
  14.         System.out.println(h2.get("k2"));         
  15.     }  


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

1、先定义Bean TestBean:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public static class TestBean implements Serializable{  
  2.         private int[] intArray;  
  3.         private HashMap<String,String> hashMapVal;  
  4.         private String strVal;  
  5.         public int[] getIntArray () {  
  6.             return intArray;  
  7.         }  
  8.         public void setIntArray (int[] intArray) {  
  9.             this.intArray = intArray;  
  10.         }  
  11.         public HashMap<String, String> getHashMapVal () {  
  12.             return hashMapVal;  
  13.         }  
  14.         public void setHashMapVal (HashMap<String, String> hashMapVal) {  
  15.             this.hashMapVal = hashMapVal;  
  16.         }  
  17.         public String getStrVal () {  
  18.             return strVal;  
  19.         }  
  20.         public void setStrVal (String strVal) {  
  21.             this.strVal = strVal;  
  22.         }  
  23.     }  


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

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public static void testBean() throws NoSuchAlgorithmException{  
  2.         Kryo kryo=new Kryo();  
  3.         kryo.register(TestBean.class,new BeanSerializer(kryo, TestBean.class));  
  4.                   
  5.         TestBean tb1=new TestBean();  
  6.         tb1.setStrVal("test1");  
  7.         tb1.setHashMapVal(new HashMap<String,String>());  
  8.         tb1.getHashMapVal().put("k1""v1");  
  9.         tb1.getHashMapVal().put("k2""v2");  
  10.         int[] ints=new int[3];  
  11.         ints[0]=1;  
  12.         ints[1]=2;  
  13.         ints[2]=3;  
  14.         tb1.setIntArray(ints);  
  15.           
  16.         Output output=new Output(11024);        
  17.         kryo.writeObject(output, tb1);  
  18.         output.close();  
  19.         byte[] data=output.toBytes();  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1.       
  2.     Input i=new Input(data);  
  3.     i.close();  
  4.     TestBean tb2= (TestBean)kryo.readObject(i, TestBean.class);  
  5.     System.out.println(tb2.strVal);  
  6.     System.out.println(tb2.hashMapVal.get("k1"));  
  7.     System.out.println(tb2.intArray[2]);                  
  8. }  



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