关于Serializable接口 的一些东西

关于Serializable接口 的一些东西

学习mybatis时候发现封装的user等类都实现了Serializable接口,但查看Serializable接口的源码发现里面什么都没有。
在这里插入图片描述
一个成员函数或者成员变量也没有。那么这个接口的作用是什么呢。在写东西的时候很想知道,所以在网上找了一些博客看过之后,知道这个接口的作用是实现序列化。
序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。
虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己写的好的保存对象状态的机制,那就是序列化。

总结:Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来(反序列化)
只要一个类实现Serializable接口,那么这个类就可以序列化了。

但这个接口里明明什么都没有,到底为什么能判定实现了它就序列化了呢?

我们这时候可以让我们的封装类不实现Serializable接口,然后运行我们的测试类,看看会发生什么。
在这里我们的测试类使用ObjectOutputStream来写入文件

 @Test
    public void test2(){
        Account account=new Account();
        account.setId(1);
        account.setMoney(10.0);
        account.setUid(1);
        account.setUser(new User());
        try {
            ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream("test"));
            outputStream.writeObject(account);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

然后运行
在这里插入图片描述
我们会发现这里抛出了一个 NotSerializableException 的异常,这里我们点进去看 ObjecyOutputStream.writeObject0 的源码
在这里插入图片描述
我们在里面发现这里判定了obj到底是什么类型的,是否是字符串,或者是数组,还是枚举还是Serializable?
如果都不是,则会抛出一个NotSerialazableException的异常。

当我们把implements Serializable加上,就会发现一切正常了
在这里插入图片描述
看到这里,我们就能知道,Serializable接口并不需要什么成员变量什么的,因为它只是起到一个标识的作用,告诉程序它标识的是可以被序列化的,但真正的操作不需要它完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值