객체를 저장하는 방법에는 2가지가 있습니다.
- 직렬화를 사용하여 저장
- 자바 프로그램에서만 사용한다는 조건에서 사용합니다.
- 클래스를 직렬화 할려면 implements Serializable를 사용해야 됩니다.
- static 변수는 직렬화 하지 못합니다.
- 클래스 중에 직렬화를 하고 싶지 않은 변수에는 transient를 사용합니다.
- 문자로 저장
- 타 프로그램에서도 저장된 객체를 사용 할 수도 있을때 사용합니다.
◆ 직렬화를 사용할 경우
try {
// "dg.ser"로 저장합니다.
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("dg.ser"));
oos.writeObject(d);
oos.close();
// 파일이름이 "dg.ser"인 파일을 가져옵니다.
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("dg.ser"));
d = (DungeonGame)ois.readObject();
ois.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
《저장》
- FileOutputStream를 사용하여 바이트 형태로 저장합니다.
- ObjectOutputStream를 사용하여 직렬화 하여 저장합니다.
- ObjectInputStream를 닫아 줍니다. ObjectInputStream를 닫으므로서 밑에 있는 FileOutputStream는 자동으로 닫힙니다.
《가져오기》
- FileOutputStream를 사용하여 바이트 형태로 읽습니다.
- ObjectOutputStream를 사용하여 클래스를 찾아서 불러온 다음 저장되었던 인스턴스 변수값을 다시 대입합니다. 직렬화된 객체의 생성자는 실행되지 않습니다.
- ObjectInputStream를 닫아 줍니다. ObjectInputStream를 닫으므로서 밑에 있는 FileOutputStream는 자동으로 닫힙니다.