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类的序列化跟还原,是不是很简单?
- </pre><pre name="code" class="java"> private static void testString () {
- Kryo kryo=new Kryo();
- String w_str1="简体中文,繁體中文,English";
-
-
- Output output=new Output(1024);
- kryo.writeObject(output, w_str1);
- output.flush();
- output.close();
- byte[] w_ret= output.toBytes();
-
-
- 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]);
- }
是不是非常简单?好了,下一篇文章讲述如何在序列化的同时进行数据的加密。。。 0 0