Java序列化之自定义序列化2

时间:2021-08-04 19:22:37

代码实现
2、通过Externalizable
自定义类,实现Externalizable接口,实现两个方法:

    @Override
public void writeExternal(ObjectOutput out) throws IOException {
}

@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
}

这两个方法与实现Serilizable添加的两个方法的比较,实现Serilizable添加的两个方法

    private void writeObject(ObjectOutputStream out) throws IOException{

}

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{

}

这里不明白,ObjectOutputStream与ObjectOutput的区别?

查看api文档,ObjectOuptut是一个接口,里面的抽象方法有close、flush、write(请仔细看API文档);ObjectOutputStream实现了ObjectOutput接口

public class Person implements Externalizable{
private String name;
private String age;

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}


@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.write(this.age.getBytes());

}

@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.age = in.readLine();

}
}

测试仍然用上篇的Server和Client来测试

实现Serializable和Externalize两个接口的区别
1、实现复杂度
前者实现简单,java对其有内建支持;后者实现复杂,由开发人员自己完成

2、执行效率
前者对象的所有可序列化的字段统一保存,性能底下;后者可根据需要序列化某些字段(当然triansent也能实现)

3、保存信息
前者占用空间大;后者少

                            参照 徐传运等编著的《Java高级程序设计》