** 객체 직렬화(Object Serialization) **
객체를 바이트 단위의 스트림으로 처리하여 외부에 전송하는 기술
** 객체 역직렬화(Object Deserialization) **
외부에 저장된 데이터를 다시 객체로 복원하는 것.
** 객체 직렬화를 하는 이유
class를 인스턴스화되면 객체는 힙영역에 구조적으로 데이터가 적재되 있는데 이상태로는 파일에 쓸수 가 없어 객체를 직렬화를 시켜준다.
객체 직렬화를 위해서는 해당 객체가 만들어지는 클래스에서
java.io.Serializable interface(maker interface 계열) 를 implements 해야 직렬화가 가능하다!
Person p=new Person();
// 만약 Person 이 implements Serializable 했다면 true 가 출력
System.out.println(p instanceof Serializable);
객체를 직렬화하여 외부로 전송하기 위한 스트림
ObjectOutputStream
writeObject(Object o){}
외부에 저장되어 있는 데이터를 다시 객체로 역직렬화하기 위한 스트림
ObjectInputStream
readObject():Object
transient : 직렬화 대상에서 제외
ex) private transient String password; // 외부로 직렬화 되지 않는다.
-Subject.java
import java.io.Serializable;
public class Subject implements Serializable{
private String title;
private int score;
private char grade;
public Subject(String title, int score) {
super();
this.title = title;
this.score = score;
setGrade();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
setGrade();
}
public char getGrade() {
return grade;
}
private void setGrade() {
switch(score/10){
case 10:
case 9:
grade='A';
break;
case 8:
grade='B';
break;
case 7:
grade='C';
break;
case 6:
grade='D';
break;
default:
grade='F';
}
}
}
- FileObjectWriteTest.java
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import vo.Subject;
public class FileObjectWriteTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject vo = new Subject("국어", 90);
try {
FileOutputStream fos = new FileOutputStream("vo.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(vo);
oos.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-FileObjectInputTest.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import vo.Subject;
public class FileObjectInputTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject s;
try {
FileInputStream fis = new FileInputStream("vo.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
s = (Subject) ois.readObject();
System.out.println(s.toString());
ois.close();
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'Code Archive > JAVA' 카테고리의 다른 글
| Step15. Thread(스레드) (0) | 2014.09.12 |
|---|---|
| Step14. Socket 프로그래밍 (0) | 2014.09.12 |
| Step12. Stream, 파일 입출력 (0) | 2014.09.12 |
| Step11. Exception(예외처리) (0) | 2014.09.12 |
| Step10. Wrapper class, Nested(inner) class (0) | 2014.09.12 |