ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

java 序列化总结和分类

java 序列化总结和分类 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 通过显式注册类和字节码生成技术,实现高性能序列化:javaKryo 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 只需一行配置:xmldubbo:protocol serialization="fst"/2.4 Protobuf — 跨语言标准需要先定义.proto文件,编译生成 Java 代码:protobufsyntax = "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 默认集成,通过注解驱动:
返回列表