100万简单实体序列化结果如下
=testJdkSerialize=
耗时1349ms
=testJdkSerialize=
=testFSTSerialize=
耗时331ms
=testFSTSerialize=
=testFastJsonSerialize=
耗时300ms
=testFastJsonSerialize=
=testGsonSerialize=
耗时675ms
=testGsonSerialize=
=testJacksonSerialize=
耗时6368ms
=testJacksonSerialize=
=testKryoSerialize=
耗时180ms
=testKryoSerialize=
pom依赖
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.51version>
dependency>
<dependency>
<groupId>de.ruedigermoellergroupId>
<artifactId>fstartifactId>
<version>2.57version>
dependency>
<dependency>
<groupId>com.google.code.gsongroupId>
<artifactId>gsonartifactId>
<version>2.8.5version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.6version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.6version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.9.6version>
dependency>
<dependency>
<groupId>com.esotericsoftwaregroupId>
<artifactId>kryoartifactId>
<version>4.0.0version>
dependency>
代码如下
package com.study.netty.lesson7;
import java.util.List;
public class SerializableTest {
private final static int COUNT = 1000000;
public static void main(String[] args) {
User user = new User();
user.setName("serializable");
user.setAge(100);
// testUser(user);
//
// List list = new ArrayList();
// list.add(user);
// testUserList(list);
testJdkSerialize(user);
testFSTSerialize(user);
testFastJsonSerialize(user);
testGsonSerialize(user);
testJacksonSerialize(user);
testKryoSerialize(user);
}
private static void testJdkSerialize(User user) {
System.out.println("=====testJdkSerialize=====");
long t1 = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
JdkSerializable.serialize(user);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时" + (t2 - t1) + "ms");
System.out.println("=====testJdkSerialize=====");
}
private static void testFSTSerialize(User user) {
System.out.println("=====testFSTSerialize=====");
long t1 = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
FSTSerializable.serialize(user);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时" + (t2 - t1) + "ms");
System.out.println("=====testFSTSerialize=====");
}
private static void testFastJsonSerialize(User user) {
System.out.println("=====testFastJsonSerialize=====");
long t1 = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
FastJsonSerializable.serialize(user);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时" + (t2 - t1) + "ms");
System.out.println("=====testFastJsonSerialize=====");
}
private static void testGsonSerialize(User user) {
System.out.println("=====testGsonSerialize=====");
long t1 = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
GsonSerializable.serialize(user);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时" + (t2 - t1) + "ms");
System.out.println("=====testGsonSerialize=====");
}
private static void testJacksonSerialize(User user) {
System.out.println("=====testJacksonSerialize=====");
long t1 = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
JacksonSerializable.serialize(user);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时" + (t2 - t1) + "ms");
System.out.println("=====testJacksonSerialize=====");
}
private static void testKryoSerialize(User user) {
System.out.println("=====testKryoSerialize=====");
long t1 = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
KryoSerializable.serialize(user);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时" + (t2 - t1) + "ms");
System.out.println("=====testKryoSerialize=====");
}
private static void testUserList(List<User> list) {
System.out.println("=====testUserList=====");
// 序列化
byte[] jdkSerialize = JdkSerializable.serialize(list);
byte[] fstSerialize = FSTSerializable.serialize(list);
String fastjsonSerialize = FastJsonSerializable.serialize(list);
String gsonSerialize = GsonSerializable.serialize(list);
String jacksonSerialize = JacksonSerializable.serialize(list);
byte[] kryoSerialize = KryoSerializable.serialize(list);
// 反序列化
System.out.println(JdkSerializable.deserialize(jdkSerialize));
System.out.println(FSTSerializable.deserialize(fstSerialize));
System.out.println(FastJsonSerializable.deserialize(fastjsonSerialize, List.class));
System.out.println(GsonSerializable.deserialize(gsonSerialize, List.class));
System.out.println(JacksonSerializable.deserialize(jacksonSerialize, List.class));
System.out.println(KryoSerializable.deserialize(kryoSerialize));
System.out.println("=====testUserList=====");
}
private static void testUser(User user) {
System.out.println("=====testUser=====");
// 序列化
byte[] jdkSerialize = JdkSerializable.serialize(user);
byte[] fstSerialize = FSTSerializable.serialize(user);
String fastjsonSerialize = FastJsonSerializable.serialize(user);
String gsonSerialize = GsonSerializable.serialize(user);
String jacksonSerialize = JacksonSerializable.serialize(user);
byte[] kryoSerialize = KryoSerializable.serialize(user);
// 反序列化
System.out.println(JdkSerializable.deserialize(jdkSerialize));
System.out.println(FSTSerializable.deserialize(fstSerialize));
System.out.println(FastJsonSerializable.deserialize(fastjsonSerialize, User.class));
System.out.println(GsonSerializable.deserialize(gsonSerialize, User.class));
System.out.println(JacksonSerializable.deserialize(jacksonSerialize, User.class));
System.out.println(KryoSerializable.deserialize(kryoSerialize));
System.out.println("=====testUser=====");
}
}
User.Java
package com.study.netty.lesson7;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = -397412467418504005L;
private String name;
private int age;
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;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
JdkSerializable.java
package com.study.netty.lesson7;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class JdkSerializable {
public static byte[] serialize(Object obj) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
byte[] bs = baos.toByteArray();
baos.close();
oos.close();
return bs;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static Object deserialize(byte[] bits) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(bits);
ObjectInputStream ois = new ObjectInputStream(bais);
Object obj = ois.readObject();
bais.close();
ois.close();
return obj;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
FSTSerializable.java
package com.study.netty.lesson7;
import java.io.Serializable;
import org.nustaq.serialization.FSTConfiguration;
public class FSTSerializable {
private static FSTConfiguration configuration = FSTConfiguration.createDefaultConfiguration();
public static byte[] serialize(Object obj) {
return configuration.asByteArray((Serializable) obj);
}
public static Object deserialize(byte[] sec) {
return configuration.asObject(sec);
}
}
FastJsonSerializable.java
package com.study.netty.lesson7;
import com.alibaba.fastjson.JSON;
public class FastJsonSerializable {
public static String serialize(Object obj) {
String json = JSON.toJSONString(obj);
return json;
}
public static Object deserialize(String json, Class<?> clazz) {
Object obj = JSON.parseObject(json, clazz);
return obj;
}
}
GsonSerializable.java
package com.study.netty.lesson7;
import com.google.gson.Gson;
public class GsonSerializable {
private static Gson gson = new Gson();
public static String serialize(Object obj) {
String json = gson.toJson(obj);
return json;
}
public static Object deserialize(String json, Class<?> clazz) {
Object obj = gson.fromJson(json, clazz);
return obj;
}
}
JacksonSerializable.java
package com.study.netty.lesson7;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonSerializable {
public static String serialize(Object obj) {
ObjectMapper mapper = new ObjectMapper();
String json = null;
try {
json = mapper.writeValueAsString(obj);
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
public static Object deserialize(String json, Class<?> clazz) {
ObjectMapper mapper = new ObjectMapper();
Object obj = null;
try {
obj = mapper.readValue(json, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
KryoSerializable.java
package com.study.netty.lesson7;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
public class KryoSerializable {
private static Kryo kryo = new Kryo();
public static byte[] serialize(Object obj) {
byte[] buffer = new byte[2048];
Output output = new Output(buffer);
kryo.writeClassAndObject(output, obj);
byte[] bs = output.toBytes();
output.close();
return bs;
}
public static Object deserialize(byte[] src) {
Input input = new Input(src);
Object obj = kryo.readClassAndObject(input);
input.close();
return obj;
}
}
码流大小测试(略)