시리얼화05:readResolve

4457 단어 서열화
만약 서열화 클래스가 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," ");
    }

}

테스트 프로그램:
@Test
public 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();
}

@Test
public 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는 시퀀스와 반정렬화 과정에서 호출됩니다.

좋은 웹페이지 즐겨찾기