Seriialization : 인스턴스의 사태를 그대로 파일 저장하거나 네트웤으로 전송하고 이를 다시 복원(deserialization) 하는 방식
자바에서 보조 스트림을 활용하여 직렬화를 제공
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
Serializable 인터페이스
: 직렬화는 인스턴의 내용이 외부로 유출되는 것이므로 프로그래머가 해당 객체에 대한 직렬화 의도를 표시해야함
Externalizable 인터페이스
: writeExternal()과 readExternal() 메소드 구현
프로그래머가 직접 객체를 읽고 쓰는 코드를 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
//class Person{ // 1.
//class Person implements Serializable{ // 2. Person를 직렬화
class Person implements Externalizable{ // 3. 직접 객체 구현
String name;
String job;
// 직렬화 하지 않을 멤버변수.
//transient String job;
public Person(){
}
public Person(String name ,String job) {
this.name = name;
this.job = job;
}
public String toString() {
return name+", "+job;
}
/*
* Externalizable 인터페이스 구현
*/
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(name);
out.writeUTF(job);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = in.readUTF();
job = in.readUTF();
}
}
public class SerialTest {
public static void main(String []args) {
Person pLee = new Person("이장수","의사");
Person pPark = new Person("박검수","경찰");
FileOutputStream fo = null;
FileInputStream fi = null;
try {
fo = new FileOutputStream("serial.txt");
//serialize 하기 위해 ObjectOutputStream보조스트림 생성
ObjectOutputStream oos = new ObjectOutputStream(fo);
// Person 클래스를 Serializable인터페이스를 구현하지 않을 경우
//class Person implements Serializable{}
// writeObject하려고 할때 값이 Serializable(직렬화) 하지 않는다.
oos.writeObject(pLee);
oos.writeObject(pPark);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fi = new FileInputStream("serial.txt");
ObjectInputStream ois = new ObjectInputStream(fi);
// readObject시 Class의 정보가 Serial.txt에 없을 때를 위해 ClassNotFoundException 예외처리.
Person lee = (Person) ois.readObject();
Person park = (Person) ois.readObject();
// Serial.txt의 정보에서 Person클래스의 toString()
System.out.println(lee);
System.out.println(park);
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
cs |
'OOP > Java' 카테고리의 다른 글
객체지향 4대 특성 (0) | 2022.07.31 |
---|---|
Thread (0) | 2022.05.29 |
보조 스트림 클래스 (0) | 2022.05.25 |
문자 단위 스트림 (0) | 2022.05.22 |
바이트 단위 입출력 스트림 (0) | 2022.05.22 |