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}
浙公网安备 33010602011771号