EsotericSoftware Kryo —— 官方(1)

时间:2022-07-25
本文章向大家介绍EsotericSoftware Kryo —— 官方(1),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

kryo是什么

kryo 是一个针对Java的快速,高效的二进制对象图形序列化框架。

kryo目标

kryo的目标是高速、占用空间小、并且有简单好用的api 随时为Java对象提供持久化的能力,包括持久化为文件、数据库、或者网络传输。 kryo也可以实现深度和浅度的复制,克隆。

kryo 复制的过程

这是一个对象到对象的复制,而不是对象到字节数据,再到对象的过程。

安装

可现在最新发行版

Maven

在pom文件中加入依赖项

<dependency>
   <groupId>com.esotericsoftware</groupId>
   <artifactId>kryo</artifactId>
   <version>5.0.0-RC4</version>
</dependency>

如果没有maven,可以使用jar

快速开始
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import java.io.*;

public class HelloKryo {
   static public void main (String[] args) throws Exception {
      Kryo kryo = new Kryo();
      kryo.register(SomeClass.class);

      SomeClass object = new SomeClass();
      object.value = "Hello Kryo!";

      Output output = new Output(new FileOutputStream("file.bin"));
      kryo.writeObject(output, object);
      output.close();

      Input input = new Input(new FileInputStream("file.bin"));
      SomeClass object2 = kryo.readObject(input, SomeClass.class);
      input.close();   
   }
   static public class SomeClass {
      String value;
   }
}

kryo类自动序列化。输出和输入的类可以处理 字节字节,或者可以输出到流中。

接下来介绍下这一切都是如何工作的以及类库的高级使用方法

IO

从kryo中拿数据或者通过kryo输出数据这个动作是通过Input 和 Output类完成的。这些类都不是线程安全的。 #####Output Output类是一个OutputStream

,能够将数据写入一个字节数组 buffer 中。如果你急需一个字节数据,这个字节数据可以获取得到,并可以直接使用。

如果输出结果是一个OutputStream输出流。那么当字节数组buffer满了后,会flush到stream中,否则output会自动扩容这个字节数组。Output类有很多高效的将原生类和字符串写为字节数组的方法。它提供了类似DataOutputStream, BufferedOutputStream, FilterOutputStream, and ByteArrayOutputStream这些类的功能,不过都在一个类里面。

Output 在写入OutputStream的时候会在字节数组中有缓冲,,所以在写完操作后,一定要调用 flush or close 方法。 如果Output 没有以OutputStream的形式提供结果,就没必要调用 flush or close 方法。

不同于许多流,一个Output 实例,通过设置position或者设置一个新的字节数据或者新的流,那么就可以被重复使用。

注意,无参的Output 构造器,创建的是一个未初始化的Output ,所以,在使用前一定要调用setBuffer方法。

Input