개인참고자료/자바(네트워크)

객체 스트림 - 예외

경진 2008. 7. 17. 08:50
객체 스트림

객체 스트림의 사용은 쉽지만 기능은 강력하다. 그리고 객체 스트림은 RMI에 내부적으로 사용되는 기술이므로 객체 스트림을 잘 알고 있어야 한다.

※ 객체 스트림을 사용할 때 java.io.Serializable 인터페이스를 꼭 구현한다. (Serializable은 구현할 메소드가 없는 마크 인터페이스이다.)

자바 API의 java.lang 패키지에서 어떠한 클래스가 java.io.Serializable 인터페이스를 구현하는지 확인한다. java.io.Serialzable 인터페이스를 구현한 클래스는 다른 클래스의 필드일 경우, 포함하고 있는 클래스가 직렬화될 때 함께 직렬화할 수 있기 때문이다.

객체 스트림에서 주의해야 할 점은, 파일에 객체 기반 스트림으로 저장할 때 객체 여러 개를 이어서 저장할 수 없다. 객체 스트림을 이용해서 객체를 파일에 저장할 때는 한 파일에 객체 하나만 저장할 수 있다. 물론, 저장되는 객체 안에 포함된 필드가 여러 개일 경우, 필드의 내용도 한꺼번에 직렬화되어 저장된다.

객체 스트림의 예외

객체 스트림은 직렬화와 역직렬화 과정과 관련해서 여러 예외를 발생시킬 수 있다.

직렬화와 역직렬화할 경우 발생할 수 있는 중요 예외

예외 설명
InvalidCalssException 객체를 역직렬화할 경우에 전송한 객체에 대한 클래스는 존재하지만 일치하지 않을 경우에 발생한다. 그리고 객체에 대한 버전 관리가 잘못 되었을 경우에 자주 발생한다.
NotSerializableException 객체를 읽거나 쓸 경우에 발생한다. 그리고 객체(혹은 객체의 필드 중 하나)를 직렬화 할 수 없을 경우에 발생한다.
StreamCorruptedException 스트림에 포함된 객체 스트림의 데이터가 유효한 것이 아니거나 헤더 정보가 잘못 되었을 경우에 발생한다.
InvalidObjectException 객체를 역직렬화한 후 검증 과정이 성공적으로 끝나지 못했을 경우에 발생한다.
WriteAbortedException 객체를 출력하는 과정에서 예외가 발생해서 제대로 출력되지 않을 객체를 다른 한쪽에 읽어 들일 때 발생한다 이 경우에는 객체가 전송될 때 발생한 예외 내용을 포함하게 된다.