객체 스트림
객체 스트림의 사용은 쉽지만 기능은 강력하다. 그리고 객체 스트림은 RMI에 내부적으로 사용되는 기술이므로 객체 스트림을 잘 알고 있어야 한다.
※ 객체 스트림을 사용할 때 java.io.Serializable 인터페이스를 꼭 구현한다. (Serializable은 구현할 메소드가 없는 마크 인터페이스이다.)
자바 API의 java.lang 패키지에서 어떠한 클래스가 java.io.Serializable 인터페이스를 구현하는지 확인한다. java.io.Serialzable 인터페이스를 구현한 클래스는 다른 클래스의 필드일 경우, 포함하고 있는 클래스가 직렬화될 때 함께 직렬화할 수 있기 때문이다.
객체 스트림에서 주의해야 할 점은, 파일에 객체 기반 스트림으로 저장할 때 객체 여러 개를 이어서 저장할 수 없다. 객체 스트림을 이용해서 객체를 파일에 저장할 때는 한 파일에 객체 하나만 저장할 수 있다. 물론, 저장되는 객체 안에 포함된 필드가 여러 개일 경우, 필드의 내용도 한꺼번에 직렬화되어 저장된다.
객체 스트림의 예외
객체 스트림은 직렬화와 역직렬화 과정과 관련해서 여러 예외를 발생시킬 수 있다.
직렬화와 역직렬화할 경우 발생할 수 있는 중요 예외
객체 스트림의 사용은 쉽지만 기능은 강력하다. 그리고 객체 스트림은 RMI에 내부적으로 사용되는 기술이므로 객체 스트림을 잘 알고 있어야 한다.
※ 객체 스트림을 사용할 때 java.io.Serializable 인터페이스를 꼭 구현한다. (Serializable은 구현할 메소드가 없는 마크 인터페이스이다.)
자바 API의 java.lang 패키지에서 어떠한 클래스가 java.io.Serializable 인터페이스를 구현하는지 확인한다. java.io.Serialzable 인터페이스를 구현한 클래스는 다른 클래스의 필드일 경우, 포함하고 있는 클래스가 직렬화될 때 함께 직렬화할 수 있기 때문이다.
객체 스트림에서 주의해야 할 점은, 파일에 객체 기반 스트림으로 저장할 때 객체 여러 개를 이어서 저장할 수 없다. 객체 스트림을 이용해서 객체를 파일에 저장할 때는 한 파일에 객체 하나만 저장할 수 있다. 물론, 저장되는 객체 안에 포함된 필드가 여러 개일 경우, 필드의 내용도 한꺼번에 직렬화되어 저장된다.
객체 스트림의 예외
객체 스트림은 직렬화와 역직렬화 과정과 관련해서 여러 예외를 발생시킬 수 있다.
직렬화와 역직렬화할 경우 발생할 수 있는 중요 예외
예외 | 설명 |
---|---|
InvalidCalssException | 객체를 역직렬화할 경우에 전송한 객체에 대한 클래스는 존재하지만 일치하지 않을 경우에 발생한다. 그리고 객체에 대한 버전 관리가 잘못 되었을 경우에 자주 발생한다. |
NotSerializableException | 객체를 읽거나 쓸 경우에 발생한다. 그리고 객체(혹은 객체의 필드 중 하나)를 직렬화 할 수 없을 경우에 발생한다. |
StreamCorruptedException | 스트림에 포함된 객체 스트림의 데이터가 유효한 것이 아니거나 헤더 정보가 잘못 되었을 경우에 발생한다. |
InvalidObjectException | 객체를 역직렬화한 후 검증 과정이 성공적으로 끝나지 못했을 경우에 발생한다. |
WriteAbortedException | 객체를 출력하는 과정에서 예외가 발생해서 제대로 출력되지 않을 객체를 다른 한쪽에 읽어 들일 때 발생한다 이 경우에는 객체가 전송될 때 발생한 예외 내용을 포함하게 된다. |
'개인참고자료 > 자바(네트워크)' 카테고리의 다른 글
InetAddress 클래스 (0) | 2008.07.17 |
---|---|
소켓 (0) | 2008.07.17 |
객체 스트림 - ObjectOutputStream와 ObjectInputStream (0) | 2008.07.17 |
객체 스트림 - 윈도우 저장과 읽기 (0) | 2008.07.17 |
객체 스트림 - 나의 책 목록(객체 스트림을 이용해 저장, 읽기) (0) | 2008.07.17 |