公司用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. bat批处理,实现获取目录

    @echo off echo 当前盘符:%~d0  echo 当前盘符和路径:%~dp0  echo 当前批处理全路径:%~f0  echo 当前盘符和路径的短文件名格式:%~sdp0  echo 当 ...

  2. Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决

    一.问题原由 Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的 Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8) ...

  3. ROS学习(九)—— rqt_console 和 roslaunch

    一.rqt_console 和rqt_logger_level 1.作用: rqt_console依据ROS编译日志,输出节点信息 rqt_logger_level可以改变节点的警告出差的警告等级 2 ...

  4. Docker Dockerfile简述

    原文地址:https://www.cnblogs.com/cuimiemie/p/6442677.html 作用 Dockerfile的内容是一坨可以执行的代码(或者说是指令)(docker的DSL) ...

  5. sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)

    sql的行转列(PIVOT)与列转行(UNPIVOT)   在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...

  6. MFC中无标题栏窗口的移动

    原文链接: http://blog.sina.com.cn/s/blog_6288219501015dwa.html   移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要 ...

  7. Thinking In Design Pattern——MVP模式演绎

    原文<Thinking In Design Pattern——MVP模式演绎>不知为何丢失了,故重新整理了一遍. 目录 What Is MVP Domain Model StubRepos ...

  8. Java Nashorn--Part 2

    在命令行中执行 JavaScript 现在我们有一个 my_script.js 文件,想在 Nashorn 下执行,则需要在命令行下执行该命令: jrunscript my_script.js jru ...

  9. window.location.href 与 window.loaction.replace区别

    window.location.href和window.location.replace的区别 1.window.location.href=“url”:改变url地址: 2.window.locat ...

  10. 常用代码之二:使用BackgroundWorker或Task让代码异步执行。

    先要引用System.ComponentModel using System.ComponentModel; 然后创建backgroundworker private void backgroundW ...