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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 怎么禁用 Ubuntu 服务器中终端欢迎消息中的广告
- Linux系统下部署项目的设置方法
- Linux中设置路由以及虚拟机联网图文详解
- 在Linux中如何一次重命名多个文件详解
- Vim自定义高亮分组以及一些实用技巧小结
- Linux redis-Sentinel配置详解
- 使用 Apache Web 服务器配置两个或多个站点的方法
- Linux下命令行cURL的10种常见用法示例
- Apache Web 服务器的安装配置方法
- Linux(Ubuntu 18.04)上安装Anaconda步骤详解
- seaborn关联图表之折线图和散点图
- Linux 系统下安装JDK1.8的教程详解
- Linux yum 命令安装mysql8.0的教程详解
- linux中叹号命令(!)的使用小结
- ubuntu下rz/sz命令的安装与使用说明