序列化:Serializable和Externalizable

来源:互联网 发布:软件研发阶段 编辑:程序博客网 时间:2024/04/29 21:19

Externalizable是深度定制序列化。如果同时实现了这两个接口,则只会执行Externalizable。

 

Serializable可以仅仅标记可序列化,使用JDK默认的序列化方法,也可以定制。实现方法:

    private void writeObject(ObjectOutputStream oos) {//        oos.defaultWriteObject();        // Write/save additional fields        oos.writeUTF(value);    }    private void readObject(ObjectInputStream ois) {//        ois.defaultReadObject();        // Read/initialize additional fields        value = ois.readUTF()    }

Externalizable必须实现方法:

    void writeExternal(ObjectOutput out) {        out.writeUTF(value)    }    void readExternal(ObjectInput input) {        value = input.readUTF()    }

如果实现是深度定制序列化,但是用Serializable的writeObject方法实现,它不一定起作用。

 

注意几点:

1、静态static成员不被序列化

2、如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException

3、transient修饰的字段不被序列化

4、父类如果不可序列化,子类不会序列化父类的成员,除非在子类中显式序列化。父类可序列化,子类也需要调用super的序列化方法。

原创粉丝点击