文章链接:http://zkread.com/article/1123137.html
Kryo是一个快速高效的Java序列化框架,旨在提供快速、高效和易用的API。无论文件、数据库或网络数据Kryo都可以随时完成序列化。Kryo还可以执行自动深拷贝(克隆)、浅拷贝(克隆)。这是对象到对象的直接拷贝,非对象->字节->对象的拷贝。性能较其它有一定的优质。具体参数可参考引用的第三篇文章。
maven中 通过如下 ,最新版为 4.0.
<!-- https://mvnrepository.com/artifact/com.esotericsoftware/kryo -->
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>4.0.0</version>
</dependency>
示例
1)文件流序列化对象
Kryo kryo = new Kryo();
// ...
Output output = new Output(new FileOutputStream("file.bin"));
SomeClass someObject = ...
kryo.writeObject(output, someObject);
output.close();
// ...
Input input = new Input(new FileInputStream("file.bin"));
SomeClass someObject = kryo.readObject(input, SomeClass.class);
input.close();
2) 字节序列化对象
public byte[] Serialize(Object object) {
Output output = null;
output = new Output(1, 4096); //1 表示后台字节数组的初始大小,4096表示数组可扩容的最大值。
kryo.writeObject(output, object);
byte[] bb = output.toBytes();
output.flush();
return bb;
}
public <t> t Deserialize(byte[] bb) {
Input input = null;
input = new Input(bb);
t res = (t) kryo.readObject(input, TestClass.class);
input.close();
return res;
}
3) 类和对象的序列化
static {
kryo.setRegistrationRequired(false);
kryo.setMaxDepth(20);
}
public static byte[] serialize(Object obj) {
ByteArrayOutputStream out = null;
Output output = null;
try {
out = new ByteArrayOutputStream();
output = new Output(out, 1024);
kryo.writeClassAndObject(output, obj);
return output.toBytes();
} catch (Exception e) {
throw new CacheException(e);
} finally {
if (null != out) {
try {
out.close();
out = null;
} catch (IOException e) {
}
}
if (null != output) {
output.close();
output = null;
}
}
}
public static Object deserialize(byte[] bytes) {
Input input = null;
try {
input = new Input(bytes, 0, 1024);
return kryo.readClassAndObject(input);
} catch (Exception e) {
throw new CacheException(e);
} finally {
if (null != input) {
input.close();
input = null;
}
}
}
相关链接:http://kavy.iteye.com/blog/2169490
kryo 的git链接:https://github.com/EsotericSoftware/kryo
http://www.codetopia.cn/2016/05/12/serialization-java-vs-kryo/