类实现Serializable接口
序列化Serializable
Serializable 接口告诉JVM,实现该接口的类的对象可以被序列化,
是java实现对象存储和运输的技术
-
例子
@Data public class User implements Serializable { private static final long serialVersionUID = -1014711414691691142L; private String name; private int age; // private transient int height; } //Demo public static void main(String[] args) throws ParseException, IOException, ClassNotFoundException { User user = new User(); user.setName("Jack"); user.setAge(28); //序列化后持久化到文件 ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("./user.txt")); os.writeObject(user); //读取序列化的对象 // ObjectInputStream is = new ObjectInputStream(new FileInputStream("./user.txt")); // Object o = is.readObject(); // if (o instanceof User){ // User o1 = (User) o; // System.out.println(o1.getName()); // System.out.println(o1.getAge()); // } } -
例子解读
-
JVM是如何序列化和反序列化的
解:序列化,过滤对象中没有transiend修饰的属性进行序列化,
反序列化,读取字节序列后,还原成object,此时还原成对象时会通过serialVersionUID来确定是否还原成同一个类,若serialVersionUID不一致,则反序列化失败
-
为什么User类需要手动设置serialVersionUID常量属性
解:即使不显式生成serialVersionUID,JVM也会自动为我们的类生成,但是JVM自动生成的SerialVersionUID对类的细节很敏感,e.g 在User类中增加了不会被序列化的transiend成员,此时JVM自动生成的SerialVersion就会改变
-
------------
静心,笃行
------------

浙公网安备 33010602011771号