Java序列化与反序列化极简入门适合零基础只讲最常用、最基础的知识让你快速掌握对象的保存与恢复。1. 什么是序列化序列化是把 Java 对象转换成字节流的过程这样对象就可以保存到文件、数据库或者通过网络传输。反序列化则是把字节流恢复成原来的 Java 对象。简单说序列化 对象 → 字节流反序列化 字节流 → 对象。有什么用保存程序运行状态比如游戏存档网络传输对象如 RPC 调用将对象存入缓存或文件2. 如何让一个对象可以序列化只需要让类实现java.io.Serializable接口这是一个标记接口里面没有任何方法表示这个类的对象可以被序列化。importjava.io.Serializable;publicclassPersonimplementsSerializable{privateStringname;privateintage;publicPerson(Stringname,intage){this.namename;this.ageage;}// getter/setter 略OverridepublicStringtoString(){returnPerson{namename, ageage};}}3. 进行序列化和反序列化使用ObjectOutputStream将对象写入文件或其他输出流使用ObjectInputStream从文件中读取对象。importjava.io.*;publicclassSerializeDemo{publicstaticvoidmain(String[]args){PersonpnewPerson(张三,25);// 序列化对象 → 文件try(ObjectOutputStreamoosnewObjectOutputStream(newFileOutputStream(person.ser))){oos.writeObject(p);System.out.println(序列化成功);}catch(IOExceptione){e.printStackTrace();}// 反序列化文件 → 对象try(ObjectInputStreamoisnewObjectInputStream(newFileInputStream(person.ser))){Personp2(Person)ois.readObject();System.out.println(反序列化得到: p2);}catch(IOException|ClassNotFoundExceptione){e.printStackTrace();}}}运行后person.ser文件里就保存了对象数据读取时能恢复成原来的对象。4. 重要注意事项新手必看4.1 必须实现 Serializable 接口如果类没有实现Serializable尝试序列化会抛出NotSerializableException。4.2transient关键字 —— 跳过某些字段有些字段不想被序列化比如密码、临时缓存可以用transient修饰序列化时会忽略它反序列化后该字段为默认值引用类型为null基本类型为 0 或 false。publicclassUserimplementsSerializable{privateStringusername;privatetransientStringpassword;// 不会被序列化// ...}4.3serialVersionUID—— 版本控制建议为每个可序列化的类显式声明一个private static final long serialVersionUID。当类发生修改如增加字段反序列化时会用这个版本号来判断是否兼容。如果不指定JVM 会动态生成类一改动就会导致InvalidClassException。publicclassPersonimplementsSerializable{privatestaticfinallongserialVersionUID1L;// ...}4.4 静态字段不会序列化因为静态字段属于类不属于对象序列化只保存对象的状态所以静态字段的值不会被保存。4.5 如果字段是引用类型该对象也必须可序列化如果类中有一个字段是其他类的对象那么那个类也必须实现Serializable否则序列化失败。5. 完整示例含 transient 和 serialVersionUIDimportjava.io.*;classStudentimplementsSerializable{privatestaticfinallongserialVersionUID1L;privateStringname;privateintscore;privatetransientStringpassword;// 不序列化publicStudent(Stringname,intscore,Stringpassword){this.namename;this.scorescore;this.passwordpassword;}OverridepublicStringtoString(){returnStudent{namename, scorescore, passwordpassword};}}publicclassTestSerial{publicstaticvoidmain(String[]args)throwsException{StudentsnewStudent(李四,95,123456);// 序列化ObjectOutputStreamoosnewObjectOutputStream(newFileOutputStream(student.ser));oos.writeObject(s);oos.close();// 反序列化ObjectInputStreamoisnewObjectInputStream(newFileInputStream(student.ser));Students2(Student)ois.readObject();ois.close();System.out.println(原始对象: s);System.out.println(恢复对象: s2);// 会发现 password 字段为 null因为 transient}}输出类似原始对象: Student{name李四, score95, password123456} 恢复对象: Student{name李四, score95, passwordnull}6. 总结概念说明序列化对象 → 字节流保存或传输反序列化字节流 → 对象实现方式类实现Serializable接口核心类ObjectOutputStream/ObjectInputStreamtransient标记字段不参与序列化serialVersionUID版本控制建议显式声明静态字段不会被序列化引用类型字段该对象的类也必须实现Serializable掌握了这些你就可以轻松地将 Java 对象保存到文件或在网络中传递了。实际开发中还会结合 JSON、XML 等更轻量的方式但 Java 原生序列化依然是基础。如果对你有帮助点个赞吧