ObjectOutputStream을 활용하여 데이터를 저장하고 ObjectInputStream을 활용하여 데이터를 읽어들이기

안녕하세요

이번 시간에는 자바에서 ObjectOutputStream을 활용하여 생성된 텍스트 파일을

ObjectInputStream을 이용하여 불러들이는 예제를 올려봅니다.

이전에 했던 예제와 흡사하나

이번 예제는 직렬화 개념과 캡슐화 개념이 있는 클래스 파일을 하나 더 만들어서 활용한 예제입니다.

아마 이전 예제보다 이번 예제가 활용도가 좀 더 높을거라고 생각합니다.


먼저 첫번째 클래스 파일 올려봅니다.

첫번째 클래스 파일 이름 Employee 이고, 이름, 부서, 봉급 정보를 가지고 있는 클래스입니다.

여기서는 직렬화(Serializable) 개념을 활용했습니다.

직렬화(Serializable)를 해야  네트워크로 해당 객체를 전송하거나 파일에 저장할 수 있습니다.

java.io.Serializable 인터페이스를 상속 받으면 직렬화가 가능한데, 직렬화란 데이터들을 한 줄로 나열될 수 있다는 것을 의미하고 이것은 스트림을 통해 해당 객체가 전송될 수 있음을 의미하는 것을 뜻합니다.


자 그럼 소스 코드 올려봅니다.


public class Employee implements Serizlizable {

private String name;
private String dept;
// transient를 붙이면 해당 변수는 스트림에 내보낼 때 노출되지 않는다, 즉 직렬화 대상에서 제외시킨다.
transient private int salary;

public Employee(){

}

public Employee(String name, String dept, int salary){
super();
this.name=name;
this.dept=dept;
this.salary=salary;
}

public void showInfo(){

System.out.println("---Record for "+name+"=----");
System.out.println("Name: "+name);
System.out.println("Dept: "+dept);
System.out.println("Salary: "+salary);

}


}

자 이번에는 ObjectOutputStreamTest라는 클래스를 만들어 위의 Employee 객체를 몇 개

생성하여 파일에 해당 객체를 저장해보겠습니다.


public class ObjectOutputStreamTest {

public static void main(String[] args) throws IOException {

Employee e1 = new Employee("King", "기획부", 5000);
Employee e2 = new Employee("Scott", "운영부", 3000);

//파일(obj.txt) => FileOutputStream====>ObjectOutputStream
//DataOutput 인터페이스와 ObjectOutput 인터페이스를 구현
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));

//java.io.NotSerializableException -> 직렬화 오류 발생 -> Employee 클래스에 implements 해야한다.
oos.writeObject(e1); oos.writeObject(e2);

//Date, JFrame 등 왠만한 것은 직렬화가 되어 있음

java.util.Date d = new java.util.Date();
oos.writeObject(d);

javax.swing.JFrame f = new javax.swing.JFrame("오브젝 스트림");
oos.writeObject(f);

oos.flush();
oos.close();
System.out.println("obj.txt 파일에 객체 쓰기 완료");
// 객체들을 바이트화 시켜서 obj.txt에 저장

}

}


두번째 소스 코드를 실행하면 아래와 같은 결과가 나옵니다.




obj.txt라는 파일이 폴더에 뜨고 콘솔창에는 ob.txt 파일에 객체 쓰기 완료라는 문구가 나오게 됩니다.

자 그럼 마지막으로 obj.txt 파일에 저장된 글들을 읽어들이는 예제를 올리면서

이상 포스팅을 마치겠습니다.


public class ObjectInputStreamTest {

public static void main(String[] args) throws IOException , ClassNotFoundException {
//obj.txt 파일 읽어서 객체를 복원하자
//obj.txt==>FileInputStream=>>ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
//readObject()은 반환형이 Object
Object o1 = ois.readObject();
//형변환
Employee e1 = (Employee)o1;
Employee e2 = (Employee)ois.readObject();
e1.showInfo(); e2.showInfo();
Date day = (Date)ois.readObject();
System.out.println("객체가 저장된 시간: "+day.toString());
JFrame ff = (JFrame)ois.readObject();
ff.setSize(300, 300); ff.setVisible(true);
ois.close();
}

}



소스 코드를 실행하면 obj.txt 파일에 있는 데이터들을 정상적으로 읽어들입니다 ㅎ


댓글 없음:

댓글 쓰기