자바 일 보기 클래스(53)의 IO 패키지 의 SerialCallbackContext 클래스

5958 단어 Java일별
이 종 류 는 내부 클래스 로 가방 밖에서 인용 할 수 없 으 며,이 종 류 는 final 이 므 로 계승 할 수 없습니다.
이 종 류 는 가방 과 계승 류 를 도입 하지 않 습 니 다.
이 클래스 의 헤더 설명 은 다음 과 같 습 니 다.
/**
 * Context during upcalls from object stream to class-defined
 * readObject/writeObject methods.
 * Holds object currently being deserialized and descriptor for current class.
 *
 * This context keeps track of the thread it was constructed on, and allows
 * only a single call of defaultReadObject, readFields, defaultWriteObject
 * or writeFields which must be invoked on the same thread before the class's
 * readObject/writeObject method has returned.
 * If not set to the current thread, the getObj method throws NotActiveException.
 */

대 의 는 다음 과 같다.
대상 흐름 에서 클래스 컨 텍스트 정의 readObject 와 writeObject 방법 으로 이 종 류 를 호출 합 니 다.
현재 역 직렬 화 된 클래스 와 이 클래스 의 설명 자 를 저장 합 니 다.
이 컨 텍스트 는 구 축 된 스 레 드 를 추적 하고 defaultReadObject,readFields,default Write Object 또는 writeFields 만 호출 할 수 있 습 니 다.클래스 전에 같은 스 레 드 에서 호출 해 야 합 니 다. readObject/writeObject 방법 이 되 돌 아 왔 습 니 다.
현재 스 레 드 를 설정 하지 않 으 면 getOj 방법 은 NotActiveException 을 던 집 니 다.
이 클래스 는 다음 과 같은 구성원 변 수 를 포함 합 니 다.
동작 하 는 Object:
private final Object obj;

내 포 된 대상 흐름:
private final ObjectStreamClass desc;

현재 작업 스 레 드
private Thread thread;

이 종 류 는 다음 과 같은 구성원 방법 을 포함 하고 있 습 니 다.
구조 함수
public SerialCallbackContext(Object obj, ObjectStreamClass desc) {
    this.obj = obj;
    this.desc = desc;
    this.thread = Thread.currentThread();
}

현재 작업 대상 가 져 오기
public Object getObj() throws NotActiveException {
    checkAndSetUsed();
    return obj;
}

현재 대상 스 트림 설명자 가 져 오기
public ObjectStreamClass getDesc() {
    return desc;
}

현재 작업 스 레 드 가용성 검사
public void check() throws NotActiveException {
    if (thread != null && thread != Thread.currentThread()) {//                      
        throw new NotActiveException(
            "expected thread: " + thread + ", but got: " + Thread.currentThread());
    }
}

현재 스 레 드 가 현재 작업 스 레 드 인지 확인 합 니 다.만약 비어 있 으 면 이상 을 던 집 니 다.
private void checkAndSetUsed() throws NotActiveException {
    if (thread != Thread.currentThread()) {
         throw new NotActiveException(
          "not in readObject invocation or fields already read");
    }
    thread = null;
}

현재 작업 스 레 드 를 비 웁 니 다.
public void setUsed() {
    thread = null;
}

이 종 류 는 주로 직렬 화 작업 시 대상,대상 류 에 대한 기록 에 사 용 됩 니 다.우 리 는 이 종 류 를 호출 할 수 없습니다.보면 됩 니 다.

좋은 웹페이지 즐겨찾기