Externalizable实现部分属性的序列化和反序列化

结合之前的序列化案例,重点说明Externalizable和Serializable实现的不同。

1. 实体类实现的接口不同:

Externalizable需要实现Externalizable接口。

代码如下:

public class Worker implements Externalizable 

2. 实现接口的方法不同:

Externalizable需要实现readExternal()和writeExternal()方法。

代码如下:

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(name);
        out.writeObject(salary);
        out.writeObject(subject);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        name = (String)in.readObject();
        salary = (Double)in.readObject();
        subject = (List<String>) in.readObject();
    }

运行结果如下:

Worker{name='刘大', salary=15000.0, subject=[线性代数, 微机接口, 马克思主义]}

3. 实现局部序列化的方式不同

Externalize实现局部序列化,只需不调用对应的方法即可。

案例代码如下:

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(name);
        out.writeObject(salary);
//        out.writeObject(subject);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        name = (String)in.readObject();
        salary = (Double)in.readObject();
//        subject = (List<String>) in.readObject();
    }

运行结果如下:

Worker{name='刘大', salary=15000.0, subject=null}
posted on 2021-10-19 22:30  技术小伙伴  阅读(77)  评论(0)    收藏  举报