java.io.ObjectOutputStream
- ObjectOutputStream 클래스는 객체들을 출력하는 기능을 제공하는 클래스로 출력 스트림에 출력하기 전에 직렬화를 수행한다.
- 파일이나 네트워크로 데이터를 전송하기 위해 직렬화를 수행하며, 이때 writeObject() 메소드를 사용하여 변환한다.
- 스트림에 저장할 수 있는 객체는 Serializable 인터페이스를 구현한 클래스의 객체만 가능하다.
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.Hashtable;
public class Ex001_ObjectOutputStream {
public static void main(String[] args) {
Hashtable<String, String> ht = new Hashtable<String, String>();
ht.put("자바", "프로그래밍");
ht.put("HTML", "웹 프로그래밍");
ht.put("오라클", "데이터베이스");
String pathname = "object.txt";
ObjectOutputStream oos = null;
try {
// ObjectOutputStream : 객체를 저장 할 수 있는 스트림
// 객체를 저장하면 파일 선두에는 객체의 클래스명이 저장된다.
oos = new ObjectOutputStream(new FileOutputStream(pathname));
oos.writeObject(ht);
System.out.println("파일 저장 완료...");
} catch (Exception e) {
e.printStackTrace();
} finally {
if(oos !=null ) {
try {
oos.close();
} catch (Exception e2) {
}
}
}
}
}
java.io.ObjectInputStream
- ObjectOutputStream 클래스에 의해 파일에 저장되거나 네트워크를 통해 전달된 객체의 직렬화를 해제하는 기능을 제공한다.
- 파일이나 네트워크를 통해 받은 직렬화된 데이터를 다시 원래 데이터로 복원하는 역할을 하며, 이때 readObject() 메소드를 사용하여 복원한다.
- readObject() 메소드를 통해 읽어 들인 데이터는 원래 데이터로 캐스팅하여 사용한다.
- 스트림으로부터 읽어들일 수 있는 객체는 Serializable 인터페이스나 Externalizable 인터페이스를 구현한 클래스의 객체만 가능하다.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Hashtable;
import java.util.Iterator;
public class Ex002_ObjectInputStream {
public static void main(String[] args) {
String pathname = "object.txt";
try ( ObjectInputStream ois = new ObjectInputStream(new FileInputStream(pathname))){
// 제너릭은 다운 캐스팅하면 경고가 나옴.
@SuppressWarnings("unchecked") // 경고없앰
Hashtable<String, String> ht = (Hashtable<String, String>)ois.readObject();
Iterator<String> it = ht.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
String value = ht.get(key);
System.out.println(key+" -> "+value);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Hashtable 은 Map의 구현 클래스로 동기화를 지원한다.
Map은 <키, 값>의 구조로 키는 중복을 허용하지 않는다. 키는 순서가 없으므로 반복자도 존재하지 않는다.
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0825_Java : Serializable 직렬화 (0) | 2021.08.26 |
---|---|
0825_Java : ObjectStream 활용 예제 (0) | 2021.08.25 |
0825_Java : DataStream 활용 예제 (0) | 2021.08.25 |
0825_Java : DataInputStream, DataOutputStream 클래스 (0) | 2021.08.25 |
0825_Java : BufferedReader, BufferedWriter 클래스 (0) | 2021.08.25 |