FSTConfiguration 高性能序列化框架FST
转自:https://blog.csdn.net/z69183787/article/details/53005961 fst是完全兼容JDK序列化协议的系列化框架,序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右。
首先引入pom
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>fst</artifactId>
<version>2.04</version>
</dependency>
package zookeeper.seria;
import java.io.Serializable;
public class FSTSeriazle {
public static void main(String[] args) {
User bean = new User();
bean.setUsername("xxxxx");
bean.setPassword("123456");
bean.setAge(1000000);
System.out.println("序列化 , 反序列化 对比测试:");
long size = 0;
long time1 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
byte[] jdkserialize = JRedisSerializationUtils.jdkserialize(bean);
size += jdkserialize.length;
JRedisSerializationUtils.jdkdeserialize(jdkserialize);
}
System.out.println("原生序列化方案[序列化10000次]耗时:"
+ (System.currentTimeMillis() - time1) + "ms size:=" + size);
size = 0;
long time2 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
byte[] serialize = JRedisSerializationUtils.serialize(bean);
size += serialize.length;
User u = (User) JRedisSerializationUtils.unserialize(serialize);
}
System.out.println("fst序列化方案[序列化10000次]耗时:"
+ (System.currentTimeMillis() - time2) + "ms size:=" + size);
size = 0;
long time3 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
byte[] serialize = JRedisSerializationUtils.kryoSerizlize(bean);
size += serialize.length;
User u = (User) JRedisSerializationUtils.kryoUnSerizlize(serialize);
}
System.out.println("kryo序列化方案[序列化10000次]耗时:"
+ (System.currentTimeMillis() - time3) + "ms size:=" + size);
}
}
class User implements Serializable{
private String username;
private int age;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
结果
序列化 , 反序列化 对比测试:
原生序列化方案[序列化10000次]耗时:458ms size:=1160000
fst序列化方案[序列化10000次]耗时:184ms size:=550000
kryo序列化方案[序列化10000次]耗时:462ms size:=390000
工具类
package zookeeper.seria; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import org.nustaq.serialization.FSTConfiguration; import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output; public class JRedisSerializationUtils { public JRedisSerializationUtils() {
} static FSTConfiguration configuration = FSTConfiguration
// .createDefaultConfiguration();
.createStructConfiguration(); public static byte[] serialize(Object obj) {
return configuration.asByteArray(obj);
} public static Object unserialize(byte[] sec) {
return configuration.asObject(sec);
} public static byte[] kryoSerizlize(Object obj) {
Kryo kryo = new Kryo();
byte[] buffer = new byte[2048];
try(
Output output = new Output(buffer);
) { kryo.writeClassAndObject(output, obj);
return output.toBytes();
} catch (Exception e) {
}
return buffer;
} static Kryo kryo = new Kryo();
public static Object kryoUnSerizlize(byte[] src) {
try(
Input input = new Input(src);
){
return kryo.readClassAndObject(input);
}catch (Exception e) {
}
return kryo;
} // jdk原生序列换方案
public static byte[] jdkserialize(Object obj) {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);) {
oos.writeObject(obj);
return baos.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
} public static Object jdkdeserialize(byte[] bits) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bits);
ObjectInputStream ois = new ObjectInputStream(bais); ) {
return ois.readObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
FSTConfiguration 高性能序列化框架FST的更多相关文章
- java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比
我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...
- Netty高性能网络应用框架对标P7面试题分享v4.1.70.Final
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Netty官网 https://netty.io/ 最新版本为4.1.70.Final Netty是一个异步的.事件驱 ...
- 常见的序列化框架及Protobuf序列化原理
原文链接:https://www.jianshu.com/p/657fbf347934 https://www.cnblogs.com/javazhiyin/p/11375553.html https ...
- 5.3.4 Hadoop序列化框架
序列化框架 除了writable实现序列化之外,只要实现让类型和二进制流相互转换,都可以作为hadoop的序列化类型,为此Hadoop提供了一个序列化框架接口,他们在org.apache.hadoop ...
- Java序列化框架性能比較
博客: http://colobu.com jvm-serializers提供了一个非常好的比較各种Java序列化的的測试套件. 它罗列了各种序列化框架. 能够自己主动生成測试报告. 我在AWS c3 ...
- 序列化战争:主流序列化框架Benchmark
序列化战争:主流序列化框架Benchmark GitHub上有这样一个关于序列化的Benchmark,被好多文章引用.但这个项目考虑到完整性,代码有些复杂.为了个人学习,自己实现了个简单的Benchm ...
- 高性能NIO框架Netty-对象传输
http://cxytiandi.com/blog/detail/17403 上篇文章高性能NIO框架Netty入门篇我们对Netty做了一个简单的介绍,并且写了一个入门的Demo,客户端往服务端发送 ...
- 基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc
基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc 二月 8, 2016 1 简介 Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞.异步.全 ...
- Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495)
框架简介 MapReduce仅仅可以支持Writable做key,value吗?答案是否定的.事实上,一切类型都是支持的,只需满足一个小小的条件:每个类型是以二进制流的形式传输.为此Hadoop提供了 ...
随机推荐
- dat.gui.js
].appendChild(b)},inject:function(e,a){a=a||document;].appendChild(b)}}}(); dat.utils.common=functio ...
- windows7 asp.net发布IIS 拒绝访问 解决方法
在windows7中打开DNN网站有以下问题: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP ...
- Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...
- python-day33--进程间通信(IPC)
方式:队列(推荐使用) 一.基本情况 1.可以往队列里放任意类型的数据 2. 队列:先进先出 3. q=Queue(3) #可以设置队列中最多可以进入多少个值,也可以不设置 q.put('first' ...
- vij 1097 贪心
合并果子 描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之 ...
- Maven 入门篇(下)
第一篇文章大概的介绍了一下Apache Maven以及它的下载和安装,并且运行了一个简单的示例.那么在对maven有了一点接触后,接下去的一步是要了解maven的核心概念,这样才能在使用maven的时 ...
- 快速切题 poj1258
坑!!!我还以为一个整数会截到两行!! Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40056 Ac ...
- ASP.NET的MVC中Model对象字段的数…
ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...
- bzoj1621
题解: 简单判断一下怎么分 如果分的话继续递归 代码: #include<bits/stdc++.h> using namespace std; int n,k; int js(int x ...
- Python Django 之 Views HttpRequest HttpReponse
一.Python Django 之 Views 数据交互 http请求中产生两个人核心对象: http请求:HttpRequest对象 http响应:HttpReponse对象 所在位置django. ...