欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Kryo框架使用方法代码示例

程序员文章站 2024-04-01 18:20:34
kryo框架的source已移至https://github.com/esotericsoftware/kryo ,进入此页面,然后点击右边的download zip按钮,...

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]);     
} 

总结

是不是非常简单?关于kryo框架使用方法代码示例的介绍就到这里,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。