序列化框架性能对比

xiaoxiao2025-12-04  5

100万简单实体序列化结果如下

=testJdkSerialize= 耗时1349ms =testJdkSerialize= =testFSTSerialize= 耗时331ms =testFSTSerialize= =testFastJsonSerialize= 耗时300ms =testFastJsonSerialize= =testGsonSerialize= 耗时675ms =testGsonSerialize= =testJacksonSerialize= 耗时6368ms =testJacksonSerialize= =testKryoSerialize= 耗时180ms =testKryoSerialize=

pom依赖

<!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> <!-- fst --> <dependency> <groupId>de.ruedigermoeller</groupId> <artifactId>fst</artifactId> <version>2.57</version> </dependency> <!-- gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency> <!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.6</version> </dependency> <!-- kryo --> <dependency> <groupId>com.esotericsoftware</groupId> <artifactId>kryo</artifactId> <version>4.0.0</version> </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<User> list = new ArrayList<User>(); // 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; } }

码流大小测试(略)

转载请注明原文地址: https://www.6miu.com/read-5040324.html

最新回复(0)