java 序列化总结和分类
2026/8/9 2:31:25 网站建设 项目流程

Java序列化是将对象状态转换为字节流的技术,用于数据持久化和网络传输,是分布式系统的基石。以下从工具、方法、实践、对比、场景到高阶应用,为你全面梳理。


一、Java序列化工具全景图

Java序列化工具按数据格式应用场景可分为三大类:

分类代表工具数据格式核心特点
JDK原生Serializable / Externalizable二进制无需外部依赖,性能最差,不跨语言
JSON文本型Jackson / Gson / Fastjson2JSON人类可读,生态丰富,调试方便
高性能二进制型Kryo / FST / Protobuf / Thrift / Avro二进制体积小、速度快,适合高性能RPC

二、序列化方法详解

2.1 JDK原生序列化

实现 java.io.Serializable 接口,借助 ObjectOutputStream / ObjectInputStream 完成:

java

// 序列化 public static byte[] serialize(Object obj) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(obj); oos.close(); return baos.toByteArray(); } // 反序列化 public static <T> T deserialize(byte[] bytes) throws Exception { ByteArrayInputStream bais = new ByteInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); T obj = (T) ois.readObject(); ois.close(); return obj; }

Externalizable 是 Serializable 的子接口,需要开发者实现 writeExternal / readExternal 方法,可精细控制序列化字段。

2.2 Kryo — 高性能Java专用

Kryo 通过显式注册类字节码生成技术,实现高性能序列化:

java

Kryo kryo = new Kryo(); kryo.register(MyClass.class); // 显式注册,提升性能 // 序列化 Output output = new Output(new FileOutputStream("file.bin")); kryo.writeObject(output, object); output.close(); // 反序列化 Input input = new Input(new FileInputStream("file.bin")); MyClass obj = kryo.readObject(input, MyClass.class); input.close();

⚠️ 注意:Kryo 非线程安全,多线程环境下需每个线程独立实例或使用池化。

2.3 FST — 兼容JDK的高性能替代

FST 完全兼容JDK序列化协议,可直接替换,速度可达JDK的10倍,体积仅为1/3

java

// 快捷方式 FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration(); byte[] bytes = conf.asByteArray(obj); Object obj2 = conf.asObject(bytes);

在 Dubbo 中启用 FST 只需一行配置:

xml

<dubbo:protocol serialization="fst"/>

2.4 Protobuf — 跨语言标准

需要先定义 .proto 文件,编译生成 Java 代码:

protobuf

syntax = "proto3"; message Person { string name = 1; int32 age = 2; }

java

// 序列化 Person person = Person.newBuilder().setName("John").setAge(30).build(); byte[] bytes = person.toByteArray(); // 直接序列化为字节数组 // 反序列化 Person person2 = Person.parseFrom(bytes);[reference:13]

2.5 Jackson — JSON序列化事实标准

Spring Boot 默认集成,通过注解驱动:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询