Java 序列化Serializable

序列化:将对象状态转换为可保持或传输的格式的过程。

与序列化相对的是反序列化,它将流转换为对象。

这两个过程结合起来,可以轻松地存储和传输数据,在Java中的这个Serializable接口其实是给jvm看的,通知jvm,我不对这个类做序列化了,你(jvm)帮我序列化就好了。

如果我们没有自己声明一个serialVersionUID变量,接口会默认生成一个serialVersionUID,默认的serialVersinUID对于class的细节非常敏感,反序列化时可能会导致InvalidClassException这个异常(每次序列化都会重新计算该值(添加属性/删除属性默认的都会变化))

    /**序列化:把对象生成文件到本地*/
    static void testSerializable() throws Exception {
        String path = "/Users/xxx/java/workspace/serializable";
        FileUtils.mkdirs(path); // 防止文件不存在
        String name = path + "/student";

        List<Student> list = new ArrayList<>();
        list.add(new Student(1, "A", 11));
        list.add(new Student(2, "B", 12));
        FileOutputStream fo = new FileOutputStream(name);
        ObjectOutputStream os = new ObjectOutputStream(fo);
        os.writeObject(list);
        os.close();
    }

    /**反序列化:把文件解析成对象*/
    static void testParseSerializable() throws Exception {
        String path = "/Users/xxx/java/workspace/serializable";
        FileUtils.mkdirs(path);
        String name = path + "/student";
        FileInputStream fi = new FileInputStream(name);
        ObjectInputStream oi = new ObjectInputStream(fi);
        List<Student> listRead = (List<Student>) oi.readObject();
        oi.close();
        System.out.println(listRead);
    }


    public class Student implements Serializable {

        private static final long serialVersionUID = -5754403511422945854L;

        int id;
        String name;
        Integer age;

        public Student(int id, String name, Integer age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString()

    }

如果指定了 serialVersionUID 那么对象 删除/添加属性 都不会对反序列化有影响

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值