Code Archive/JAVA

Step13. 객체 직렬화(Object Serialization)

쌍큐 2014. 9. 12. 14:14


** 객체 직렬화(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