`
kavy
  • 浏览: 891424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

快速序列化工具kryo

 
阅读更多

kryo是个高效的Java序列化库,kryonet是一个基于kryo的RPC库,使用TCP和UDP通讯,目前不支持http协议。 

优点: 

    速度快!见https://github.com/eishay/jvm-serializers/wiki/Staging-Results 

    支持互相引用,比如类A引用类B,类B引用类A,可以正确地反序列化。 

    支持多个引用同一个对象,比如多个类引用了同一个对象O,只会保存一份O的数据。 

    支持一些有用的注解,如@Tag,@Optional。 

    支持忽略指定的字段。 

    支持null 

    代码入侵少 

    代码比较简法(比起msgpack,少得多) 

缺点: 

    bug多 2.12,2.14都有bug 

    文档比较少,有些使用方法要看代码才能理解,最新版2.14有bug,不能正确反序列化map类型。 

    不是跨语言的解决方案 

    貌似每一个类都要注册下,不然只能用writeClassAndObject和readClassAndObject函数。 

    类要有一个空的构造函数,不然不能序列化。 


----------------------------------------------------------------------------- 
简单例子,见: 
http://howwish2011.iteye.com/blog/1568164 

摘录下 
static private void bean3() { 
Kryo kryo = new Kryo(); 
// kryo.setReferences(true); 
                // kryo.setRegistrationRequired(true); 
// kryo.setInstantiatorStrategy(new StdInstantiatorStrategy()); 
//注册类 
Registration registration = kryo.register(Student.class); 
long time = System.currentTimeMillis(); 
for (int i = 0; i < 100000; i++) { 
//序列化 
Output output = null; 
// ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
//output = new Output( outStream , 4096); 
output = new Output(1, 4096); 
Student student = new Student("zhangsan", "man", 23); 
kryo.writeObject(output, student); 
byte[] bb = output.toBytes(); 
// System.out.println(bb.length); 
output.flush(); 

//反序列化 
Input input = null; 
// input = new Input(new 
        // ByteArrayInputStream(outStream.toByteArray()),4096); 
input = new Input(bb); 
Student s = (Student) kryo.readObject(input, registration.getType()); 
System.out.println(s.getName()+","+s.getSex()); 
input.close(); 

time = System.currentTimeMillis() - time; 
System.out.println("time:" + time); 


       序列化的速度比java更快,更是在缓存区占用更少。 


bean类: 

package com.test; 

import java.io.Serializable; 

public class Student implements Serializable{ 
private String name; 
private String sex; 
private int age; 

public Student() { 


public Student(String name, String sex, int age) { 
super(); 
this.name = name; 
this.sex = sex; 
this.age = age; 


public String getName() { 
return name; 



public String getSex() { 
return sex; 


public int getAge() { 
return age; 



更多不错的文章介绍: 
一个多个序列化框架的对比:http://x-rip.iteye.com/blog/1555293 

两篇原理介绍文: 
http://x-rip.iteye.com/blog/1555344 
http://blog.csdn.net/hengyunabc/article/details/7764509

分享到:
评论

相关推荐

    java高效对象序列化反序列化工具kryo-2.21

    总之,Kryo作为Java高效对象序列化和反序列化的工具,因其高性能、内存效率和灵活性而受到广泛青睐。在处理大量数据传输或需要快速序列化操作的场景下,Kryo是一个非常理想的解决方案。通过理解其工作原理和最佳实践...

    kryo序列化jar包集合

    Kryo是一个高效的序列化库,特别适用于Java和Android平台,用于将对象转换为字节流,以便在网络传输或持久化存储中使用。序列化是软件开发中的一个重要环节,它允许我们将复杂的对象结构转换为简单的数据格式,便于...

    kryo序列化

    Kryo序列化是一种高效、快速的Java对象序列化框架,被广泛用于数据持久化、网络传输和内存缓存等场景。Kryo库以其优秀的性能在众多序列化库中脱颖而出,尤其是在处理大量对象时,它的速度比Java内置的序列化机制快得...

    kryo4.0.0最新依赖包

    Kryo是Java编程语言中的一款高效、快速的对象序列化库,尤其在大数据处理、网络通信以及持久化存储等场景中广泛应用。Kryo 4.0.0是该库的一个版本,发布于2017年7月25日,作为当时maven库中的最新版,它提供了对Java...

    kryo4.0.0依赖包

    总之,Kryo 4.0.0是一个经过验证的、能正确处理自定义对象序列化的版本,其高性能和灵活性使其成为Java开发者的重要工具。在实际使用中,理解其工作原理、配置选项以及安全注意事项,将有助于充分利用这一库的优势。

    基于Kryo序列化机制的RPC协议——Kryonet的应用与研究

    Kryonet是Java领域中一个轻量级、高效的RPC框架,它利用了Kryo库进行序列化,从而提供了快速的数据交换能力。本文将深入探讨Kryonet在RPC协议中的应用与研究。 首先,我们来理解Kryo序列化机制。Kryo是一个高性能的...

    KryoJava序列化和克隆框架具有快速高效自动的特点

    Kryo是一个针对Java的高性能对象图序列化框架,由Esoteric Software开发,其特性包括快速、高效以及自动处理,使得在内存序列化和反序列化过程中能实现卓越的性能。 **Kryo的核心特性** 1. **速度与效率**:Kryo...

    Kryo所需的依赖包

    - 分布式系统:Kryo常用于分布式计算框架如Hadoop、Spark,作为数据交换的序列化工具。 - 缓存系统:在Memcached或Redis等缓存系统中,Kryo可以提高数据读写速度。 - 游戏开发:游戏服务器中的状态序列化、网络...

    Hadoop序列化机制

    5. Kryo:Kryo是一个快速、高效的Java序列化库,特别适合内存到内存的序列化。在Hadoop中,Kryo通常用于减少MapReduce任务的序列化开销,提高处理速度。但是,Kryo不支持序列化为文件,也不提供跨语言的兼容性。 在...

    kryo4.0.0最新依赖包及其demo

    Kryo是Java编程语言中的一款高效、快速的对象序列化库,尤其在大数据处理和分布式系统中广泛应用。序列化是将对象的状态转换为字节流的过程,而反序列化则是将字节流恢复为对象的过程。这使得数据可以持久化存储或在...

    memcached session manager 1.9.6 适用于 tomcat 8 各版本 支持kryo等多种序列化方式

    3. **Kryo**: 是一个快速、高效的对象图形序列化框架,适用于Java。它能够将Java对象转换为字节流,便于在网络间传输或存储。 4. **Memcached**: 前面已解释,是一种内存缓存系统,用于存储临时数据,提高Web应用的...

    Netty服务端与客户端依靠Java序列化传输数据

    Java序列化相对较慢,对于高并发和大数据量的场景,可能需要考虑其他的序列化库,如FST、Kryo或Google的Protobuf等。这些库提供更快的速度和更小的序列化数据大小。 7. **Netty与协议**: Netty支持多种协议,如...

    Flink 数据类型与序列化.pdf

    在源码层面,Flink的序列化框架使用到了多种策略,如Java序列化、Kryo序列化和Avro序列化等,以达到优化性能和减小数据体积的目的。不同的序列化策略在不同的使用场景下有不同的表现,因此,选择合适的序列化方式...

    akka-kryo-serialization.zip

    Kryo 是一个快速且高效的序列化库,它能够将 Java 对象转换为字节流,便于存储或网络传输。在 Akka 中,序列化是必要的,因为它涉及到Actor系统的消息传递,尤其是当需要进行远程通信时。 标题"akka-kryo-...

    序列化性能测试JAVA

    在Java编程语言中,序列化是一个重要的特性,它允许我们将对象的状态转换为字节流,以便存储或在网络中传输。序列化性能测试是评估不同序列化库或技术在处理大量数据时效率的关键环节。本篇文章将深入探讨Java序列化...

    Serializations:序列化和反序列化的一些代码

    总之,序列化和反序列化在Scala开发中是不可或缺的工具,它们使得数据可以在不同环境之间无缝移动。选择合适的序列化库,理解和管理好序列化带来的安全和版本问题,将有助于提高代码的稳定性和效率。

    memcach-session-manager(MSM)所需jar包,TOMCAT7

    Kryo是一个快速、高效的对象图形序列化框架,它用于在网络间或持久化数据时序列化和反序列化对象。 **Memcached Session Manager(MSM)** MSM是一个开源项目,它允许Tomcat将用户的HTTP会话状态存储在Memcached...

    memcached-session-manager集成包

    3. **kryo-1.04.jar**:Kryo是一个快速、高效的对象序列化库,用于将Java对象转换为字节流,以便于存储或网络传输。在这个集成包中,Kryo被用作一种序列化策略,以优化会话数据的存储和检索速度。 4. **msm-...

    constretto-api-2.1.4.zip

    在外部合并排序中,Kryo起到了至关重要的作用,因为它能快速地将Java对象序列化和反序列化,这对于数据的读取和写入至关重要。Kryo序列化的速度远超Java自带的序列化机制,这使得在排序过程中,数据的交换和存储变得...

    memcached用到的包

    Kryo是一个高效的序列化库,常与Memcached结合使用,因为它可以显著减少序列化和反序列化的时间。如果压缩包中包含kryo相关的jar(如kryo.jar),那么这表明可以使用Kryo进行数据序列化,以提升缓存效率。 4. **...

Global site tag (gtag.js) - Google Analytics