简单的serializable,一句话概括“有了serializable,才能持久化存储”

serializable序列化

        1、什么是序列化

               1、简单来说,序列化就是将对象可以持久化存储,持久化存储的好处就是可以随时需要的时候再将文件转换回对象,这也就是serializable接口存在的意义

               2、如果不实现serializable接口,在执行IO操作的时候,java会提示没有实现serializable

               3、在代码实现的时候需要 实现 Serializable 接口 并 指定 serialVersionUID

        2、什么是serialVersionUID标识

               1、在JVM中,如果要持久化类,必须有一个指定的标识来确定反序列化时来确定哪个类来加载,如果判断反序列化时两个序列化标识不同,则会报错

               2、如果不默认serialVersionUID,jvm会自动分配一个序列化标识,但是由于可能jvm在不同环境下生成的序列化标识不同,导致没有必要的错误,所以我们一定要将serialVersionUID在代码中标识出来,不要跟自己过不去

               3、在idea中,想要自动生成serialVersionUID,需要先在Settings -> Plugins 插件管理中,搜索GenerateSerialVersionUID插件并安装,重启idea后,使用alt + insert快捷键 点击 serialVersionUID即可自动生成

        3、代码实现

                1、先创建一个User对象,给这个对象加上serializable接口标识,并且指定serialVersionUID

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private String id;
    private String name;

    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }
}

                2、将该对象存储到本地,此时发现成功存入,但如果没有实现会报找不到序列化标识错误

    private static void write() {
        User user = new User("1001", "Bob");
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\user.txt"));
            objectOutputStream.writeObject(user);
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

              3、从本地文件中加载对象,如果此时对象中的序列化标识与文件中的序列化标识不一致,则会报错

    private static void read() {
        try {
            ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("D:\\user.txt"));
            User user = (User) inputStream.readObject();
            System.out.println(user);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_38384460/article/details/112845256