简介

最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括:

专门针对java语言的:Kryo,FST等等

跨语言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等

这些序列化方式的性能多数都显著优于hessian2(甚至包括尚未成熟的dubbo序列化)。有鉴于此,我们为dubbo引入Kryo和FST这 两种高效Java序列化实现,来逐步取代hessian2。其中,Kryo是一种非常成熟的序列化实现,已经在Twitter、Groupon、 Yahoo以及多个著名开源项目(如Hive、Storm)中广泛的使用。而FST是一种较新的序列化实现,目前还缺乏足够多的成熟使用案例,但它还是非 常有前途的,下面我们比较下,java原生序列化Kryo序列化性能比较

1、实体类 Simple.java package bhz.entity;

import java.io.Serializable;

import java.util.Map;

public class Simple implements Serializable

{

private static final long serialVersionUID = -4914434736682797743L;

private String name;

private int age;

private Map map;

public Simple(){

}

public Simple(String name,int age,Map map){

this.name = name;

this.age = age;

this.map = map;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Map getMap() {

return map;

}

public void setMap(Map map) {

this.map = map;

}

}

2、java原生序列化 OriginalSerializable.java package bhz.test;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.HashMap;

import java.util.Map;

import bhz.entity.Simple;

public class OriginalSerializable {

public static void main(String[] args) throws IOException, ClassNotFoundException {

long start = System.currentTimeMillis();

setSerializableObject();

System.out.println("java原生序列化时间:" + (System.currentTimeMillis() - start) + " ms" );

start = System.currentTimeMillis();

getSerializableObject();

System.out.println("java原生反序列化时间:" + (System.currentTimeMillis() - start) + " ms");

}

public static void setSerializableObject() throws IOException{

FileOutputStream fo = new FileOutputStream("D:/file2.bin");

ObjectOutputStream so = new ObjectOutputStream(fo);

for (int i = 0; i < 100000; i++) {

Map map = new HashMap(2);

map.put("zhang0", i);

map.put("zhang1", i);

so.writeObject(new Simple("zhang"+i,(i+1),map));

}

so.flush();

so.close();

}

public static void getSerializableObject(){

FileInputStream fi;

try {

fi = new FileInputStream("D:/file2.bin");

ObjectInputStream si = new ObjectInputStream(fi);

Simple simple =null;

while((simple=(Simple)si.readObject()) != null){

//System.out.println(simple.getAge() + " " + simple.getName());

}

fi.close();

si.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

//e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

3、kyro序列化 KyroSerializable.java package bhz.test;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.objenesis.strategy.StdInstantiatorStrategy;

import bhz.entity.Simple;

import com.esotericsoftware.kryo.Kryo;

import com.esotericsoftware.kryo.KryoException;

import com.esotericsoftware.kryo.io.Input;

import com.esotericsoftware.kryo.io.Output;

public class KyroSerializable {

public static void main(String[] args) throws IOException {

long start = System.currentTimeMillis();

setSerializableObject();

System.out.println("Kryo 序列化时间:" + (System.currentTimeMillis() - start) + " ms" );

start = System.currentTimeMillis();

getSerializableObject();

System.out.println("Kryo 反序列化时间:" + (System.currentTimeMillis() - start) + " ms");

}

public static void setSerializableObject() throws FileNotFoundException{

Kryo kryo = new Kryo();

kryo.setReferences(false);

kryo.setRegistrationRequired(false);

kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());

kryo.register(Simple.class);

Output output = new Output(new FileOutputStream("D:/file1.bin"));

for (int i = 0; i < 100000; i++) {

Map map = new HashMap(2);

map.put("zhang0", i);

map.put("zhang1", i);

kryo.writeObject(output, new Simple("zhang"+i,(i+1),map));

}

output.flush();

output.close();

}

public static void getSerializableObject(){

Kryo kryo = new Kryo();

kryo.setReferences(false);

kryo.setRegistrationRequired(false);

kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());

Input input;

try {

input = new Input(new FileInputStream("D:/file1.bin"));

Simple simple =null;

while((simple=kryo.readObject(input, Simple.class)) != null){

//System.out.println(simple.getAge() + " " + simple.getName() + " " + simple.getMap().toString());

}

input.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch(KryoException e){

}

}

}

4、测试结果对比

java原生序列化时间:8281 ms

java原生反序列化时间:5899 ms

Kryo 序列化时间:630 ms

Kryo 反序列化时间:15 ms

经过对比,可以发现kryo是java原生序列化性能十几倍

总结

以上就是本文关于java原生序列化和Kryo序列化性能实例对比分析的全部内容,希望对大家有所帮助,感兴趣的朋友可以参考:Kryo框架使用方法代码示例 实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法) 浅谈Java序列化和hessian序列化的差异等,有什么问题可以随时留言,小编必定及时回复大家,感谢朋友们对本站的支持。

krait和kryo_java原生序列化和Kryo序列化性能实例对比分析相关推荐

  1. 【java】java原生序列化和Kryo序列化性能实例对比分析

    1.美图 2.概述 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf, ...

  2. krait和kryo_java原生序列化和Kryo序列化性能比较

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift, ...

  3. avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift, ...

  4. spark之kryo序列化及其使用

    spark之kryo序列化 spark之kryo 序列化 Spark 中使用 Kryo序列化 中文切词案例: spark之kryo 序列化 1.定义:把对象转换为字节序列的过程称为对象的序列化. 把字 ...

  5. spark之kryo 序列化

    几乎所有的资料都显示kryo 序列化方式优于java自带的序列化方式,而且在spark2.*版本中都是默认采用kryo 序列化.因此本文将做kryo 做一个测试以验证其性能. 1.先给出定义:     ...

  6. 使用Kryo的序列化方式提升Netty性能

    2019独角兽企业重金招聘Python工程师标准>>> 为什么选择Kryo? 首先,Kryo的序列化方式,在性能方面是比较好的,和Protobuf差不多,比Java原生的序列化方式快 ...

  7. 在Dubbo中使用高效的Java序列化(Kryo和FST)

    作者:沈理 文档版权: Apache 2.0许可证 署名-禁止演绎 完善中-- TODO 生成可点击的目录 目录 序列化漫谈 启用Kryo和FST 注册被序列化类 无参构造函数和Serializabl ...

  8. dubbo kryo序列化_为什么如此高效?解密kryo各个数据类型的序列化编码机制,强...

    用过dubbo的开发人员,在替换序列化时都会根据"经验"来选kryo为序列化框架,其原因是序列化协议非常高效,超过java原生序列化协议,hessian2协议,那kryo为什么高效 ...

  9. java kryo 序列化_java中的序列化方式及dubbo使用kryo序列化

    java中的序列化方式: 1. 自带序列化  ObjectInputSteam. ObjectOutStream等 2. hession2 3. json ,xml等格式 4.kryo 5.FST - ...

最新文章

  1. Hobby开挂!加速web编码
  2. loadrunner中变量和参数之间的转化实例
  3. java 循环赛问题,网球循环赛思路 - 分治法求解(无代码)
  4. oracle操作字符串:拼接、替换、截取、查找
  5. c语言scarf函数原型,scanf 函数原型.doc
  6. Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
  7. 关于不过洋节的通知_蟠桃宫小学关于平安夜、圣诞节安全教育告家长通知书
  8. 密码学系列之:SAFER
  9. one microblog from 任志强
  10. 认证授权方案之授权揭秘 (上篇)
  11. 刨根问底--struts-default.xml
  12. Oracle书籍资料链接——更新ing
  13. JAVAWeb项目 微型商城项目-------(六)管理员登录
  14. 微信小程序登录 php后台
  15. 6108v9c卡刷包_[高安]华为EC6108V9C_mv100强制刷机固件包下载
  16. 前端使用cesium加载地球
  17. Dart语言入门(一)
  18. 软件测试团队口号及队名,团队口号及霸气队名
  19. 开源java数据库库
  20. 魔方解法 -- Rubic cube

热门文章

  1. 海航集团怎么样温暖世界的呢?
  2. 渝海手机号码归属地查询工具php版 v1.1
  3. 面向对象三大特征---继承
  4. [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
  5. python爬取网易云音乐歌单_【python】爬取并批量下载网易云歌单,嗨翻暑假!
  6. 千锋教育威哥学Java——爆破专栏丨Spring Security系列教程之解决Spring Security环境中的跨域问题
  7. 在Spring Boot中使用数据缓存
  8. 【Go语言入门指南】零基础入门 go 语言 | Golang 入门指南
  9. [解锁越狱]诺基亚 Lumia 710 800 最详细的解锁越狱教程
  10. 解决VirtualBox不能为虚拟电脑打开一个新任务