티스토리 뷰

자바 직렬화된 객체를 파일에 저장하는 방법

 

객체를 저장하는 방법에 대해 알아보겠습니다.

1) FileOutputStream 을 생성

2) ObjectOutputStream 을 생성

3) 객체를 저장.

4) ObjectOutputStream 을 클로즈

 

위에 4가지를 알고 있으시면 객체를 파일에 저장하는데 큰 무리가 없습니다.

 

}
import java.util.HashMap;

public class Test {

 @SuppressWarnings({ "rawtypes", "unchecked", "nls" })
 public static void main(String[] args) throws IOException {
  
  FileOutputStream fileStream = new FileOutputStream("c:\\testDir\\leesejin.ser");
  
  ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileStream);
  
  HashMap userInfoMap = new HashMap();
  userInfoMap.put("TEL", "02-324-2424");
  userInfoMap.put("phone", "010-9999-9999");
  userInfoMap.put("address", "서울서 서추구 방배동 34244");

  userInfoMap.put("age", "43");

   userInfoMap.put("bitrhday", "19330101");

  
  objectOutputStream.writeObject(userInfoMap);
  
  objectOutputStream.close();
  
 }

컴파일하여 실행해보면 leesejin.ser 파일이 생성되 있습니다.

 

 

 

이번에는 역직렬화를 이용하여 객체를 복구해보겠습니다.

 import java.io.*;
import java.util.HashMap;
import java.util.Iterator;

public class Test {

 @SuppressWarnings({ "rawtypes", "unchecked", "nls" })
 public static void main(String[] args) throws IOException, ClassNotFoundException {
  
  FileInputStream fileStream = new FileInputStream("c:\\testDir\\leesejin.ser");
  
  ObjectInputStream objectInputStream = new ObjectInputStream(fileStream);
  
 
  
  Object object = objectInputStream.readObject();
  
  objectInputStream.close();
  
  System.out.println("읽어온 객체의 type->"+ object.getClass());
  
  HashMap hashMap = (HashMap)object;
  

  Iterator<String> it = hashMap.keySet().iterator(); 
  
  while(it.hasNext()){  // 맵키가 존재할경우

    
       String key = it.next();  // 맵키를 꺼냄

        String value   =  (String)hashMap.get(key);  // 키에 해당되는 객체 꺼냄
       
        System.out.println(key + "->" + value);

  }  
 }
}

결과값

읽어온 객체의 type->class java.util.HashMap
address->서울서 서추구 방배동 34244
phone->010-9999-9999
TEL->02-324-2424

age->43

birthday->19330101

 

 

결과를 보시면 아시겠지만 직렬화된 파일에서 객체를 읽어서  해당 값들을 추출하는 소스입니다.

 

역직렬화 : 객체 복구

1) FileInputStream 을 생성

2) ObjectInputStream 생성

3) 객체를 읽습니다.

4) 객체를 캐스트 합니다.

5) ObjectInputStream 클로즈.

 

참고로 직렬화에 대해 자세히 알려면 열심히 배우는 수밖에 없습니다.

객체를 직렬화하여 파일에 저장할수가 있는데 이때 특정 객체를 제외시키고자 할때 필요한 키워드가 있습니다.

바로 transient 키워드입니다.

해당 키워드를 사용한객체는 직렬화가 되지 않습니다.

나중에 역직렬화로 복구할때 transient 키워드를 사용한 변수는 null값 혹은 기본값을 할당받게 됩니다.

 

readObject() 리턴 유형은 Object이므로 원래 유형으로 캐스트 해야 합니다.

 

HashMap hashMap = (HashMap)object;

위에 소스 보시면 아시겠지만 HashMap으로 저장한 객체이므로 다시 HashMap으로 캐스트 해주었습니다.

 

 

간단히 직렬화된 객체를 파일에 저장후 다시 읽어들이는 방법에 대해 알아봤습니다.

 


 

댓글