Kryo序列化学习笔记

来源:互联网 发布:在淘宝上开店步骤 编辑:程序博客网 时间:2024/03/29 22:09

参考资料: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);    }}


0 0
原创粉丝点击