【Kryo】简单地使用Kryo
公司用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的更多相关文章
- 高性能的序列化与反序列化:kryo的简单使用
前言:kryo是个高效的java序列化/反序列化库,目前Twitter.yahoo.Apache.strom等等在使用该技术,比如Apache的spark.hive等大数据领域用的较多. 为什么使用k ...
- 在Dubbo中使用高效的Java序列化(Kryo和FST)
在Dubbo中使用高效的Java序列化(Kryo和FST) 作者:沈理 文档版权:Creative Commons 3.0许可证 署名-禁止演绎 完善中…… TODO 生成可点击的目录 目录 序列化漫 ...
- Kryo官方文档-中文翻译
Kryo作为一个优秀的Java序列化方案,在网上能找到不少测评,但未见系统的中文入门或说明文档.官方文档是最好的学习文档.虽然英文不差,但啃下来毕竟没母语来的舒服.这里抽出时间做些翻译,以方便大家查阅 ...
- Java 序列化界新贵 kryo 和熟悉的“老大哥”,就是 PowerJob 的序列化方案
本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.com/ ...
- jackson、fastjson、kryo、protostuff等序列化工具性能对比
简介 实际项目中,我们经常需要使用序列化工具来存储和传输对象.目前用得比较多的序列化工具有:jackson.fastjson.kryo.protostuff.fst 等,本文将简单对比这几款工具序列化 ...
- 分布式RPC框架Dubbo实现服务治理:集成Kryo实现高速序列化,集成Hystrix实现熔断器
Dubbo+Kryo实现高速序列化 Dubbo RPC是Dubbo体系中最核心的一种高性能,高吞吐量的远程调用方式,是一种多路复用的TCP长连接调用: 长连接: 避免每次调用新建TCP连接,提高调用的 ...
- 浅谈Spark Kryo serialization
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3833985.html 最近在使用spark开发过程中发现当数据量很大时,如果cache数据将消耗很多的内 ...
- 【原】Kryo序列化篇
Kryo是一个快速有效的对象图序列化Java库.它的目标是快速.高效.易使用.该项目适用于对象持久化到文件或数据库中或通过网络传输.Kryo还可以自动实现深浅的拷贝/克隆. 就是直接复制一个对象对象到 ...
- Kryo 为什么比 Hessian 快
Kryo 是一个快速高效的Java对象图形序列化框架,它原生支持java,且在java的序列化上甚至优于google著名的序列化框架protobuf.由于 protobuf需要编写Schema文件(. ...
随机推荐
- 【转】file_get_contents("php://input")的使用方法
$data = file_get_contents("php://input"); php://input 是个可以访问请求的原始数据的只读流. POST 请求的情况下,最好 ...
- uitextview根据内容算高度
UITextView根据内容自动改变frame 分类: iOS2013-03-08 07:27 190人阅读 评论(0) 收藏 举报 注意点: 在textview中计算string占据的高度不能使用[ ...
- iOS transform解决连续多次旋转缩放,实现图片旋转缩放效果
一.需求 实现imageView的缩放旋转效果,一般有两种方式: 1.底层加scrollview,利用scrollview的属性实现.(推荐这种,这是我比较后发现的,手势做缩放旋转会有点弊端) 2.利 ...
- 【RS】Local Collaborative Ranking - LCR: 局部协同排序
[论文标题]Local Collaborative Ranking (WWW '14 23rd WWW ) [论文作者]Joonseok [论文链接]Paper(11-pages // Doubl ...
- at com.mysql.jdbc.SQLError.createSQLException
WARN run, com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1de6191 -- APPARENT DEA ...
- Nginx反向代理+Tomcat+Springmvc获取用户访问ip
Nginx+Tomcat+Springmvc获取用户访问ip 1.Nginx反向代理 修改Nginx配置文件 location / { ***********之前代码*******; proxy_se ...
- 【Spring】Spring+SpringMVC+MyBatis框架的搭建
1,SSM的简介 SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中s ...
- java php 等,路径 上级路径,上上级路径表示方法
如何表示上级目录 ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推. ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类 ...
- Git 分支(分布式版本控制系统)
前言 几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是一个略微低效的过程--常常需要完全创建一个源代码目录的 ...
- appium简明教程(4)——appium client的安装
appium client是对webdriver原生api的一些扩展和封装.它可以帮助我们更容易的写出用例,写出更好懂的用例. appium client是配合原生的webdriver来使用的,因此二 ...