Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,进入此页面,然后点击右边的Download Zip按钮,就能下载到最新版本的Kryo框架。
导入Eclipse时,记得JDK/JRE选用 JDK1.7版本,因为Kryo会引用到unsafe()对象的一些方法JDK1.7才兼容。。
先来一个String类的序列化跟还原,是不是很简单?
java" id="highlighter_738510">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
</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也自动匹配:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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)); ,具体例子如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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();
|
1
2
3
4
5
6
7
|
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框架使用方法代码示例的介绍就到这里,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。
原文链接:http://blog.csdn.net/rocklee/article/details/26451739