자바 사용자 정의 직렬 화

2949 단어 Java
자바 직렬 화 방식 으로 자바 대상 을 전송 한다 면 사용자 정의 직렬 화 방식 으로 완성 하 는 것 이 좋 을 것 같 습 니 다.readObject, writeObject, writeReplace, readResolve 등 네 가지 개인 적 인 방법 으로 직렬 화 과정 을 정의 하 는 방법 을 살 펴 보 자.1) 첫 번 째 장면 에서 우 리 는 직렬 화 과정 에서 transient 에 의 해 수 식 된 변 수 를 바 꾸 고 싶 습 니 다.
class TestSer implements Serializable {
    String name;
    transient int age;

    private void readObject(ObjectInputStream in) throws Exception {
        in.defaultReadObject();
        this.age = in.readInt();
    }

    private void writeObject(ObjectOutputStream ou) throws Exception {
        ou.defaultWriteObject();
        ou.writeInt(this.age);
    }
}

readObject 와 writeObject 두 함 수 를 이용 하여 transient 수식 변수의 직렬 화 행 위 를 변경 합 니 다.
2) 두 번 째 장면 은 단일 사례 의 안전성 을 보장 한다.
class Single implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    String name;

    private static class InstanceHandler {
        private static final Single s = new Single(); 
    }

    public static Single getInstance() {
        return InstanceHandler.s;
    }

    private Single() {}

    private Object readResolve() {
        return InstanceHandler.s;
    }
}

readObject 이후 readResolve 함 수 를 이용 하여 단일 대상 으로 돌아 가 단일 사례 의 안전성 을 보장 합 니 다. 이 방법 을 다시 쓰 지 않 으 면 반 직렬 화 대상 은 새로운 대상 입 니 다.
3) 세 번 째 장면 에서 직렬 화 된 대상 을 바 꾸 고 writeObject 를 호출 하기 전에 writeReplace 함 수 를 이용 하여 직렬 화 될 대상 을 바 꿉 니 다.
private Object writeReplace() {
        return this;
    }

이 return 함 수 를 통 해 현재 직렬 화 대상 을 교체 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기