Serializable和Externalizable

无论是Serializable,还是Externalizable,他们都是实现序列化或者持久化的接口.
先解释下什么叫序列化,序列化就是对象保存到磁盘上,或者是对象由一台机器发送过来并保存下来就是序列化.
那么,serializable和externalizable就是用来标示这个对象时可以被序列化的,既然是一样的功能,那么serializable和externalizable的区别是什么:

  • 实现serializable,这个确确实实就是一个可以序列化的标示,对serializable进行implements之后,我们不用实现任何的功能,但是如果选择用externalizable,则需要进行实现它其中的接口,那么这其中的工作都将是程序员的.
  • 但是serializable是虚拟机内建的,那么必然是占用大多的资源,导致速度减慢.而externalizable则是由程序员决定,存储什么,那么性能就要比serializable好多了.

但是,为什么有时候即使实现了serializable或者实现了externalizable,序列化却任然失败了,这里的原因有俩个:

  • 实现序列化的对象永久保存下来的只是他的数据,如果一个变量是一个对象的话,那么他的构造方法和一般方法都会被序列化.如果是树,或者是图,那么也可能不会被序列化.这其中的原因是对象中,数据时可以改变的,但是一个变量指向的对象,那么对象的值就是确定了的.而树和图也有可能由于内部数据不能确定而导致失败.
  • 再有一个是有的数据不能被序列化,但是你却必须使用,那么就是导致序列化失败,解决办法是把这个不能序列化的东东用瞬时值修饰下.
public class MyClass implements Serializable { 
    //用transient修饰的值是瞬时的
    public transient Thread myThread; 
    private String customerID; 
    private int total; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值