시소당
#Serializable 인터페이스
* 객체의 직렬화(저장)시 데이터의 저장과 복구가 자동으로 이루어짐.
* implements Serializable
*객체의 직렬화
1. SerialObject so = new SerialObject(); //직렬화 객체 생성
2. FileOutputStream fos = new FileOutputStream("file_name"); //파일스트림생성
3. ObjectOutputStream oos = new ObjectOutputStream(fos); //객체스트림으로 변환
4. oos.writeObject(so); //객체저장
5. oos.close(); //스트림닫기
*객체의 역직렬화
1. FileInputStream fis = new FileInputStream("file_name"); //파일스트림생성
2. ObjectInputStream ois = new ObjectInputStream(fis); //객체스트림으로 변환
3. Object obj = ois.readObject() //객체읽기
4. SerialObject temp = (SerialObject) obj; //형복원
5. ois.close() //스트림닫기
# Externalizable 인터페이스
- 사용자가 직접 객체를 직렬화하기 위해 사용
- 메서드
writeExternal(): 기록하는 부분을 제어
readExternal(): 읽어내는 부분을 제어
- 구현된 순으로 기록되며 기록된 순서대로 읽어야함.
# transient 키워드
- 멤버변수를 직렬화의 대상에서 제외할때..
- static키워드가 붙은 멤버변수는 자동으로 직렬화에서 제외됨.(중요)
# 직렬화가 불가능한 경우
1. 직렬화가 불가능한 객체를 포함한 경우
- 이벤트 어댑터, 이미지 필터, AWT클래스, beans, Socket, URLConnection
해결책: 직렬화가 불가능한 멤버변수에 transient키워드 사용
2. 상위클래스에서 Serializable를 구현하지 않은 경우
해결책: 상위클래스에도 implements Serializable을 상속받는다.
출처 : http://blog.empas.com/free7js/15349934