公司用Kryo,先接触下,简单记录下。

引入包

    <dependencies>
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>3.0.3</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>

简单的使用

实体对象:

import java.io.Serializable;

public class User implements Serializable {

    private Integer id;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
} }

使用kryo序列化和反序列化:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import org.junit.Test; import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output; public class HowToUse { @Test
public void output() throws FileNotFoundException {
User user = new User();
user.setId(100);
user.setName("Nick Huang"); try (Output output = new Output(new FileOutputStream("d:/binary/user.bin"))) {
Kryo kryo = new Kryo();
kryo.writeObject(output, user);
}
} @Test
public void input() throws FileNotFoundException {
try (Input input = new Input(new FileInputStream("d:/binary/user.bin"))) {
Kryo kryo = new Kryo();
User user = kryo.readObject(input, User.class);
System.out.println(user);
}
} }

简单地和JDK自带序列化和反序列化对比

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 com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output; public class Compare { public static void main(String[] args) throws Exception {
outputByKryo();
inputByKryo();
outputByJdk();
inputByJdk();
} public static void outputByKryo() throws FileNotFoundException {
long startTime = System.currentTimeMillis();
for (int i = 10000; i < 20000; i++) {
User user = new User();
user.setId(i);
user.setName("Nick Huang"); try (Output output = new Output(new FileOutputStream("d:/binary/user" + i + ".bin"))) {
Kryo kryo = new Kryo();
kryo.writeObject(output, user);
}
}
System.out.println("outputByKryo cost : " + (System.currentTimeMillis() - startTime));
} public static void inputByKryo() throws FileNotFoundException {
long startTime = System.currentTimeMillis();
for (int i = 10000; i < 20000; i++) {
try (Input input = new Input(new FileInputStream("d:/binary/user" + i + ".bin"))) {
Kryo kryo = new Kryo();
User user = kryo.readObject(input, User.class);
}
}
System.out.println("inputByKryo cost : " + (System.currentTimeMillis() - startTime));
} public static void outputByJdk() throws IOException {
long startTime = System.currentTimeMillis();
for (int i = 20000; i < 30000; i++) {
User user = new User();
user.setId(i);
user.setName("Nick Huang"); try (ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("d:/binary/user" + i + ".bin"))) {
output.writeObject(user);
}
}
System.out.println("outputByJdk cost : " + (System.currentTimeMillis() - startTime));
} public static void inputByJdk() throws IOException, ClassNotFoundException {
long startTime = System.currentTimeMillis();
for (int i = 20000; i < 30000; i++) {
try (ObjectInputStream input = new ObjectInputStream(new FileInputStream("d:/binary/user" + i + ".bin"))) {
User user = (User)input.readObject();
}
}
System.out.println("inputByJdk cost : " + (System.currentTimeMillis() - startTime));
} }

日志:

outputByKryo cost : 5856
inputByKryo cost : 516
outputByJdk cost : 7494
inputByJdk cost : 1142

【Kryo】简单地使用Kryo的更多相关文章

  1. 高性能的序列化与反序列化:kryo的简单使用

    前言:kryo是个高效的java序列化/反序列化库,目前Twitter.yahoo.Apache.strom等等在使用该技术,比如Apache的spark.hive等大数据领域用的较多. 为什么使用k ...

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

    在Dubbo中使用高效的Java序列化(Kryo和FST) 作者:沈理 文档版权:Creative Commons 3.0许可证 署名-禁止演绎 完善中…… TODO 生成可点击的目录 目录 序列化漫 ...

  3. Kryo官方文档-中文翻译

    Kryo作为一个优秀的Java序列化方案,在网上能找到不少测评,但未见系统的中文入门或说明文档.官方文档是最好的学习文档.虽然英文不差,但啃下来毕竟没母语来的舒服.这里抽出时间做些翻译,以方便大家查阅 ...

  4. Java 序列化界新贵 kryo 和熟悉的“老大哥”,就是 PowerJob 的序列化方案

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.com/ ...

  5. jackson、fastjson、kryo、protostuff等序列化工具性能对比

    简介 实际项目中,我们经常需要使用序列化工具来存储和传输对象.目前用得比较多的序列化工具有:jackson.fastjson.kryo.protostuff.fst 等,本文将简单对比这几款工具序列化 ...

  6. 分布式RPC框架Dubbo实现服务治理:集成Kryo实现高速序列化,集成Hystrix实现熔断器

    Dubbo+Kryo实现高速序列化 Dubbo RPC是Dubbo体系中最核心的一种高性能,高吞吐量的远程调用方式,是一种多路复用的TCP长连接调用: 长连接: 避免每次调用新建TCP连接,提高调用的 ...

  7. 浅谈Spark Kryo serialization

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3833985.html 最近在使用spark开发过程中发现当数据量很大时,如果cache数据将消耗很多的内 ...

  8. 【原】Kryo序列化篇

    Kryo是一个快速有效的对象图序列化Java库.它的目标是快速.高效.易使用.该项目适用于对象持久化到文件或数据库中或通过网络传输.Kryo还可以自动实现深浅的拷贝/克隆. 就是直接复制一个对象对象到 ...

  9. Kryo 为什么比 Hessian 快

    Kryo 是一个快速高效的Java对象图形序列化框架,它原生支持java,且在java的序列化上甚至优于google著名的序列化框架protobuf.由于 protobuf需要编写Schema文件(. ...

随机推荐

  1. SG 函数初步 HDU 1536 &amp;&amp; HDU 1944

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1944 pid=1536"> http://acm.hdu.edu.cn/showpr ...

  2. 【mysql】关于ICP、MRR、BKA等特性

    一.Index Condition Pushdown(ICP) Index Condition Pushdown (ICP)是mysql使用索引从表中检索行数据的一种优化方式,从mysql5.6开始支 ...

  3. Mybaits 使用多数据库源错误 --MapperScannerConfigurer配置

    我在配置文件里面配置了一个数据源,数据源参数是根据配置文件加载.数据源在mybaits和自定义数据工具类中使用,但是启动工程后,报错如下:  ### Cause: org.springframewor ...

  4. java struts2入门学习---常用标签学习总结

    jsp页面中引入标签: <%@ taglib uri="/struts-tags" prefix="s"%> 常用标签知识点总结: <s:fi ...

  5. iOS 用自签名证书实现 HTTPS 请求的原理

    在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求.默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向Info ...

  6. [转]nf_conntrack: table full, dropping packet 连接跟踪表已满,开始丢包 的解决办法

      nf_conntrack: table full, dropping packet  连接跟踪表已满,开始丢包 的解决办法 中午业务说机器不能登录,我通过USM管理界面登录单板的时候发现机器没有僵 ...

  7. Python学习笔记(九)—— 函数

    一.函数调用: 1.python内部函数查询:http://docs.python.org/3/library/functions.html#abs 2.注意调用函数的参数个数和类型. 3.函数名其实 ...

  8. JavaScript三种方式改变标签css

    原文地址:https://www.cnblogs.com/xiangru0921/p/6514225.html <body> <div id="div">这 ...

  9. 【Linux】双向重导向命令tee

    想个简单的东西,我们知道 > 会将数据流整个传送给文件或装置,因此我们除非去读取该文件或装置, 否则就无法继续利用这个数据流.万一我想要将这个数据流的处理过程中将某段信息存下来,应该怎么做? 利 ...

  10. 代码收藏系列--php--生成简短唯一订单号(转载)

    代码收藏系列--php--生成简短唯一订单号 /** * 生成商家交易单号 * <br />特点:不重复 * <br />示例: * <br />普通付款:arra ...