参考资料:https://github.com/EsotericSoftware/kryo#quickstart
开始
Kryo是一种基于java的快速高效序列化框架,该框架的目标是速度,效率以及容易使用的API。项目可以在任何时间将对象永久化到文件,数据库或者网络。
先看一个最简单的例子
Kryo kryo = new Kryo();
try {
Output output = new Output(new FileOutputStream("file.bin"));
String strobj = "hello world";
kryo.writeObject(output, strobj);
output.close();
Input input = new Input(new FileInputStream("file.bin"));
String someObject = kryo.readObject(input, String.class);
System.out.println(someObject);
input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
该程序能够将String对象序列化到文件,然后在从文件中反序列化到内存对象
IO
Output对象继承至OutputStream,可以通过其将数据写入到它内部的bytebuffer。如果给这个Output设置了一个OutputStream的话,当它内部的buffer满了的话,它会将字节数据自动的flush到输出流。Output有很多方法用来将原语和字符串写成字节,它提供的功能类似于DataoutputStream,BufferedOutputStream,FilterOutputStream。
因为Output会将数据缓存到内部的字节数组中,所以当调用完写数据操作后,务必调用flush(),close()函数确保数据发送到输出流中。
Input类是一种InputStream,可以从一个字节数组中读取数据,这个缓存数组可以直接设置。如果给Input设置了InputStream的话,它将从输入流中读取数据来fill缓存数组。Input具有很多方法将字节转换成原语和字符串。它提供的功能类似DataInputStream, BufferedInputStream, FilterInputStream, andByteArrayInputStream.
Serialzer
Kryo是一种序列化框架,它不强制使用某种模式或者操作特点的数据,这些规范都交由Serializers自己来处理。Serializers提供了默认操作数据的各种方法。如果不是特别用途的话,它可以部分或全部的替代。框架提供的Serializers为大多数的对象提供了读写操作的方法,如果需要的的话,自己实现一个Seralizer也十分容易,框架提供了Serialzer抽象类,该类提供了对象转字节和字节转对象的方法。
public class ColorSerializer extends Serializer<Color> {
public void write (Kryo kryo, Output output, Color object) {
output.writeInt(object.getRGB());
}
public Color read (Kryo kryo, Input input, Class<T> type) {
return new Color(input.readInt(), true);
}
}