ObjectInputStream & ObjectOutputStream
• ObjectInputStream 인스턴스를 입력하는 스트림 : 인스턴스 직렬화
ObjectInputStream oi = new ObjectInputStream(new FileInputStream("Object.bin"))
public final Object readObject() throws IOException, ClassNotFoundException
• ObjectOutputStream 인스턴스를 출력하는 스트림 : 인스턴스 역직렬화
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream("Object.bin"))
public final void writeObject(Object obj) throws IOException
ObjectOutputStream 예제
public class SBox implements java.io.Serializable {
String s;
public SBox(String s) { this.s = s; }
public String get() { return s; }
}
인스턴스 직렬화를 위한 기본 조건인
Serializable 인터페이스의 구현
public static void main(String[] args) {
SBox box1 = new SBox("Robot");
SBox box2 = new SBox("Strawberry");
try(ObjectOutputStream oo =
new ObjectOutputStream(new FileOutputStream("Object.bin"))) {
oo.writeObject(box1); // box1이 참조하는 인스턴스 저장
oo.writeObject(box2); // obx2가 참조하는 인스턴스 저장
}
catch(IOException e) {
e.printStackTrace();
}
}
ObjectInputStream 예제
public static void main(String[] args) {
try(ObjectInputStream oi =
new ObjectInputStream(new FileInputStream("Object.bin"))) {
SBox box1 = (SBox) oi.readObject(); // 인스턴스 복원
System.out.println(box1.get());
SBox box2 = (SBox) oi.readObject(); // 인스턴스 복원
System.out.println(box2.get());
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
줄줄이 사탕으로 엮여 들어갑니다. 그리고 transient
public class SBox implements java.io.Serializable {
String s; // s가 참조하는 인스턴스까지 함께 저장
public SBox(String s) { this.s = s; }
public String get() { return s; }
}
참조변수 s가 참조하는 인스턴스가 Serializable을 구현하는 클래스의 인스턴스이면 함께 직렬화!
String은 Serializable을 구현하기 때문에 인스턴스 저장시 같이 저장됨!
String 인스턴스는 저장하고 싶지 않고 null로 초기화 하고 싶으면 transient 사용해주면 됨!
public class SBox implements java.io.Serializable {
transient String s; // 이 참조변수가 참조하는 대상은 저장하지 않겠다는 선언
public SBox(String s) { this.s = s; }
public String get() { return s; }
}
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 33-2. NIO.2 기반의 I/O 스트림 생성 (0) | 2019.10.28 |
---|---|
[윤성우 열혈자바] 33-1. 파일 시스템 (0) | 2019.10.28 |
[윤성우 열혈자바] 32-3. 문자 스트림의 이해와 활용 (0) | 2019.10.28 |
[윤성우 열혈자바] 32-2. 필터 스트림의 이해와 활용 (0) | 2019.10.28 |
[윤성우 열혈자바] 32-1. I/O 스트림에 대한 이해 (0) | 2019.10.28 |