2011. 7. 30. 17:33
직렬화 가능한 클래스 만들기 JAVA이야기2011. 7. 30. 17:33
마커 인터페이스를 구현해주면 끝
기본 직렬화 프로세스는 transient나 static이 아닌 객체의 필드들을 직렬화하는 것이다.
직렬화와 역직렬화 순서
object <- inputSource <- URLInput <- HTTPInput
URLInput이 Serializable 구현
객체의 타입 계층도에서 Serialiazable을 구현하는 첫번째 클래스를 찾는다.
스트림은 이 클래스의 슈퍼 클래스의 무인자 생성자를 호출 여기서는 inputSource가 여기에 해당한다.
만약 슈퍼 클래스의 다른 상태를 보존해야 한다면 URLInput은 슈퍼 클래스의 상태를 직렬화하고 이를 역직렬화 해서 복구할 책임이 있다.
만약 슈퍼클래스가 직렬화가 가능하지 않은 상태를 가졌다면 직렬화가 가능한 첫번째 클래스를 수정해야 한다. 직렬화가 가능한 첫번째 클래스가 Object를 직접 확장하고 있다면 쉽게 수정할 수 있다. 왜냐하면 Object는 보존하거나 복구할 상태를 가지고 있지 않기 때문이다.
URLInput이 HashMap참조를 가졌다면 HashMap과 HashMap내용들은 HTTPInput이 역직렬화되기 전에 역직렬화될 것이다.
역직렬화를 하기 위해서는 관련된 클래스들을 가장 먼저 로딩해야 한다. 이렇게 하기 위해서는 직렬화한 클래스와 동일한 이름의 클래스를 찾고 이 클래스가 동일한 클래스인지를 검사해야한다. 찾은 클래스가 동일한 클래스라면 로딩하여야한다.
어렵다.... 반복해서 학습하자
기본 직렬화 프로세스는 transient나 static이 아닌 객체의 필드들을 직렬화하는 것이다.
직렬화와 역직렬화 순서
object <- inputSource <- URLInput <- HTTPInput
URLInput이 Serializable 구현
객체의 타입 계층도에서 Serialiazable을 구현하는 첫번째 클래스를 찾는다.
스트림은 이 클래스의 슈퍼 클래스의 무인자 생성자를 호출 여기서는 inputSource가 여기에 해당한다.
만약 슈퍼 클래스의 다른 상태를 보존해야 한다면 URLInput은 슈퍼 클래스의 상태를 직렬화하고 이를 역직렬화 해서 복구할 책임이 있다.
만약 슈퍼클래스가 직렬화가 가능하지 않은 상태를 가졌다면 직렬화가 가능한 첫번째 클래스를 수정해야 한다. 직렬화가 가능한 첫번째 클래스가 Object를 직접 확장하고 있다면 쉽게 수정할 수 있다. 왜냐하면 Object는 보존하거나 복구할 상태를 가지고 있지 않기 때문이다.
URLInput이 HashMap참조를 가졌다면 HashMap과 HashMap내용들은 HTTPInput이 역직렬화되기 전에 역직렬화될 것이다.
역직렬화를 하기 위해서는 관련된 클래스들을 가장 먼저 로딩해야 한다. 이렇게 하기 위해서는 직렬화한 클래스와 동일한 이름의 클래스를 찾고 이 클래스가 동일한 클래스인지를 검사해야한다. 찾은 클래스가 동일한 클래스라면 로딩하여야한다.
어렵다.... 반복해서 학습하자
'JAVA이야기' 카테고리의 다른 글
직렬화된 필드 (0) | 2011.08.07 |
---|---|
맞춤화된 직렬화 (0) | 2011.08.07 |
객체 직렬화 (1) | 2011.07.30 |
Data 바이트 스트림 (0) | 2011.07.30 |
StreamTokenizer (0) | 2011.07.30 |