本文详细讲解Java序列化和反序列化核心知识点包含含义、作用、实现方式、transient关键字、版本号、应用场景。一、序列化和反序列化概述序列化把Java对象转换为字节序列byte[]的过程可以写入文件、存入数据库、网络传输反序列化把字节序列恢复为Java对象的过程读取文件、接收网络数据后还原对象二、作用持久化把对象保存到文件/数据库网络传输对象在服务器之间传递RPC、分布式深拷贝对象复制三、实现步骤1. 实体类实现 Serializable 接口标记接口importjava.io.Serializable;// 必须实现Serializable接口publicclassUserimplementsSerializable{// 序列化版本号强烈建议加privatestaticfinallongserialVersionUID1L;privateStringname;privateintage;publicUser(){}publicUser(Stringname,intage){this.namename;this.ageage;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.ageage;}OverridepublicStringtoString(){returnUser{namename, ageage};}}四、序列化流 ObjectOutputStream写对象importjava.io.FileOutputStream;importjava.io.ObjectOutputStream;publicclassSerializeDemo{publicstaticvoidmain(String[]args)throwsException{// 1. 创建对象UserusernewUser(双栈小码哥,22);// 2. 创建序列化流ObjectOutputStreamoosnewObjectOutputStream(newFileOutputStream(user.txt));// 3. 写对象序列化oos.writeObject(user);// 4. 关闭流oos.close();System.out.println(序列化完成);}}五、反序列化流 ObjectInputStream读对象importjava.io.FileInputStream;importjava.io.ObjectInputStream;publicclassDeserializeDemo{publicstaticvoidmain(String[]args)throwsException{// 1. 创建反序列化流ObjectInputStreamoisnewObjectInputStream(newFileInputStream(user.txt));// 2. 读取对象强转Useruser(User)ois.readObject();// 3. 使用对象System.out.println(user);System.out.println(user.getName());System.out.println(user.getAge());// 4. 关闭流ois.close();}}六、transient 关键字作用被修饰的成员变量不参与序列化// 密码不序列化privatetransientStringpassword;特点反序列化后值为默认值引用类型nullint0敏感信息密码、token常用七、serialVersionUID 序列化版本号必须加否则修改类后反序列化会报错InvalidClassException作用标识类版本确保序列化前后类一致固定写法privatestaticfinallongserialVersionUID1L;八、静态变量能否序列化不能静态变量属于类不属于对象序列化只保存对象状态不保存类信息九、序列化/反序列化使用注意事项必须实现Serializable接口类中所有成员变量也必须可序列化使用transient排除不需要序列化的字段必须加serialVersionUID流使用完必须关闭子类序列化父类也必须实现序列化接口十、应用场景Redis 缓存对象网络传输对象Dubbo、SpringCloud本地文件缓存对象分布式服务数据传递我是双栈小码哥点赞收藏关注希望本文能对您的学习和工作有所帮助。