Kryo是一个快速高效的Java序列化框架,旨在提供快速、高效和易用的API。无论文件、数据库或网络数据Kryo都可以随时完成序列化。Kryo还可以执行自动深拷贝(克隆)、浅拷贝(克隆)。这是对象到对象的直接拷贝,非对象->字节->对象的拷贝。
安装
Kryo JAR可以在发布页面和Maven中央仓库下载。Kryo最新镜像可以在Sonatype仓库找到,包括对master分支的镜像构建。
Maven集成
要使用Kryo的官方发布版本,请将下面脚本添加到pom.xml中:
XHTML
1 2 3 4 5 | <dependency> <groupId>com.esotericsoftware</groupId> <artifactId>kryo</artifactId> <version>3.0.3</version> </dependency> |
如果遇到问题,可能是因为你的classpath上已经安装了不同版本的asm。可以使用kryo-shaded jar中的asm版本,重新定位到不同的package:
XHTML
1 2 3 4 5 | <dependency> <groupId>com.esotericsoftware</groupId> <artifactId>kryo-shaded</artifactId> <version>3.0.3</version> </dependency> |
如果要测试最新的Kryo镜像,请在pom.xml中使用下面代码:
XHTML
1 2 3 4 5 6 7 8 9 10 11 | <repository> <id>sonatype-snapshots</id> <name>sonatype snapshots repo</name> <url>https://oss.sonatype.org/content/repositories/snapshots</url> </repository>
<dependency> <groupId>com.esotericsoftware</groupId> <artifactId>kryo</artifactId> <version>3.0.4-SNAPSHOT</version> </dependency> |
快速上手
下面展示了如何使用Kryo:
Java
1 2 3 4 5 6 7 8 9 10 | 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(); |
Kryo类负责协调了对象序列化。Output和Input类负责缓存字节并flush到流中(这一步可选)。下面展示了序列化过程的细节和Kryo的优势。
非Maven环境使用Kryo
如果在非Maven环境下使用Kryo,请注意Kryo jar有一些外部依赖,这些JAR也需要添加到你的classpath中。包括MinLog日志库和Objenesis库 。
主要特性
- IO
- 基于Unsafe的IO
- Serializer
- Registration
- 默认serializer
- FieldSerializer
- KryoSerializable
- Class字段注解
- Java序列化
- 读写
- 引用
- 创建对象
- 拷贝/克隆
- Context
- 压缩和加密
- 区块编码
- 兼容性
- 互操作能力
- 堆栈大小
- 线程
- Kryo实例池
- 日志
- Scala
- Objective-C
开发资源
- 上面介绍的功能针对Kryo v2及更高版本。了解v1.x请参阅V1文档。
- 使用Kryo进行网络通信KryoNet是不错的选择。
- kryo邮件列表
- 使用Kryo的项目:
- KryoNet(NIO网络通信)
- Twitter’s Scalding(级联Scala API)
- Twitter’s Chill(Scala版的Kryo Serializer)
- Apache Hive (查询计划序列化)
- DataNucleus (JDO/JPA持久化框架)
- CloudPelican
- Yahoo’s S4 (分布式流式计算)
- Storm (分布式实时计算系统,反过来被许多其他工具使用)
- Cascalog (Clojure/Java数据处理和查询细节)
- memcached-session-manager(Tomcat高可用性会话)
- Mobility-RPC (启用RPC的分布式应用程序)
- akka-kryo-serialization (Akka版的Kryo Serializer)
- Groupon
- Jive
- DestroyAllHumans (机器人控制!)
- kryo-serializers (其它Serializer)