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

代码实现
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高级程序设计》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值