Kryo框架使用方法代码示例
作者:OK_boom 发布时间:2021-05-30 15:46:05
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框架使用方法代码示例的介绍就到这里,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。
来源:http://blog.csdn.net/rocklee/article/details/26451739


猜你喜欢
- 在我们应用程序的业务逻辑中,经常会碰到参数校验的情况,手动的在代码层上面进行校验就会带来很不好的体验,阅读、维护的成本会大大增加,造成冗余。
- Lua是目前国内使用最多的热更语言,基于Lua的热更框架也非常多,最近学习了一下ToLua的热更框架,主要使用的问题在于C#和Lua之间的互
- 效果图接下来就是一波贴代码的过程自定义Dialogpublic class SinaSendView extends Dialog { &n
- Android 自定义gradle property在Android studio上运行项目,gradle的配置是必不可少的,但是随着项目的
- 在开发Android应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样
- 首先,说说final。final关键字可以修饰变量,方法,类。final变量:需求:1 需要一个永不改变的编译时常量2 一个运行时被初始化的
- 先介绍去掉标题栏的方法: 第一种:也一般入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURE
- 本文实例讲述了Java深度复制功能与用法。分享给大家供大家参考,具体如下:写在前面:什么是深度复制?在Java里面,在创建一个对象,我们通常
- 一、ID生成策略1、使用@TableId注解@TableId注解:主键注解使用位置:实体类主键字段。@Data@ToString@Table
- 一、简介应用程序配置文件(App.config)是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以
- Java自定义异常类的实例详解为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写。我们常用的类ArithmeticExce
- 前言Spring Data Jpa框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。Spring Data Jpa存储库抽
- 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If
- 最近在读zxing项目,学到了不少东西。推荐大家也读读。里面有个BeepManager类,实现一个蜂鸣音和震动的实现。我们一起来看看他是怎么
- zuul动态路由网关服务是流量的唯一入口。不能随便停服务。所以动态路由就显得尤为必要。数据库动态路由基于事件刷新机制热修改zuul的路由属性
- 1.SpringBoot整合JDBCTemplate1.1.导入jdbc相关依赖包主要的依赖包:<dependency> &nb
- 本文实例为大家分享了java实现砸金蛋抽奖的具体代码,供大家参考,具体内容如下代码如下需求:用户每一次砸金蛋,抽中一等奖的概率为2% 二等奖
- Android基础教程数据存储之文件存储将数据存储到文件中并读取数据1、新建FilePersistenceTest项目,并修改activit
- 前言现在很多web应用,做过web项目的童鞋都知道,web结果由html+js+css组成,html结构都有一定的规范,数据动态交互可以通过
- 代码分2块,server端:class Program {