Serializable:readResolve

来源:互联网 发布:h3c端口删除vlan命令 编辑:程序博客网 时间:2024/05/16 08:45

如果序列化类定义了Object readResolve() ,那么将无视readObject的实现,直接返回作为readResolve() 方法返回值的对象。

public class People implements Serializable{    /**     *      */    private static final long serialVersionUID = 2659082826995480601L;    private int age;    private String name;    People(int age,String name)    {        this.age = age;        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    private void writeObject(ObjectOutputStream out)    {        System.out.println("是否调用了我?");    }    private void readObject(ObjectInputStream in)    {        System.out.println("是否调用了我?");    }    private Object readResolve()     {        return new People(20,"老子喜欢刚正面");    }}

测试程序:

@Testpublic void testOut01() throws FileNotFoundException, IOException{    People p = new People(100,"老汉");    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\temp01.txt"));    out.writeObject(p);    out.flush();    out.close();}@Testpublic void testIn01() throws FileNotFoundException, IOException, ClassNotFoundException{    ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\temp01.txt"));    People p = (People)in.readObject();    in.close();    System.out.println(p.getAge());    System.out.println(p.getName());}

People p = (People)in.readObject();拿到了

private Object readResolve() {    return new People(20,"老子喜欢刚正面");}

这个对象,尽管writeObject/readObject什么都没做。
在这个过程中writeObject/readObject仍然在序列话和反序列化过程中被调用。

0 0
原创粉丝点击