판봉 개발 일기
객체 입출력 보조 스트림 본문
ObjectOutputStream과 ObjectInputStream 보조 스트림을 연결하면
메모리에 생성된 객체를 파일 또는 네트워크로 출력할 수 있습니다.
ObjectOutputStream은 객체를 직렬화하며, ObjectInputStream은 객체로 역직렬화하는 역할을 합니다.
※직렬화란? 객체를 바이트 배열로 만드는 것을 말합니다. 역질렬화는 바이트 배열을 다시 객체로 복원하는 것을 말합니다.
ObjectInputStream과 ObjectOutputStream은 다른 보조 스트림과 마찬가지로 연결할 바이트 기반 입출력 스트림을 생성자의 매개값으로 받게됩니다.
ObjectInputStream ois = new ObjectInputStream(바이트 기반 입력 스트림);
OjbectOutputStream oos = new ObejctOutputStream(바이트 기반 출력 스트림);
그리고 ObjectOutputStream의 wrtieObject()메소드는 객체를 직렬화해서 출력 스트림으로 보내게됩니다.
oos.wrtieObject(객체);
반대로 ObjectInputStream의 readObject() 메소드는 입력 스트림에서 읽은 바이트를 역직렬화 하여 객체를 복원 뒤 리턴합니다. 하지만 리턴 타입이 Object타입 이기때문에 원래 타입으로 다시 강제로 변환을 시켜주어야 합니다.
객체타입 변수이름 = (객체타입) ois.readObject();
※참고로 자바는 java.io.Serializable 인터페이스를 구현한 객체만 직렬화합니다.(메소드 선언이 없는 인터페이스)
그러므로 네트워크에 전송을 하려면 클래스 선언시 implements Serializable을 추가해야합니다.
(JVM에게 직렬화 승인을 하는 역할)
public class xxx implements Serializable {...}
※참고로 List 컬렉션의 구현 클래스인 ArrayList는 Serializable 인터페이스를 구현하고 있습니다.
그리고 ArrayList에 저장되는 객체 역시 Serializable 인터페이스를 구현하고 있어야 합니다.
'자바 복습' 카테고리의 다른 글
Scanner 클래스는 무엇인가 (0) | 2021.07.17 |
---|---|
입출력 관련 API (0) | 2021.07.17 |
프린터 보조 스트림 (0) | 2021.07.16 |
기본 타입 입출력 보조 스트림 (0) | 2021.07.15 |
성능 향상 보조 스트림 (0) | 2021.07.15 |