2013년 2월 17일 일요일

[Java] 객체 저장(OutputStream, InputStream, BufferStream)

객체를 저장하는 방법에는 2가지가 있습니다.
  1. 직렬화를 사용하여 저장
    • 자바 프로그램에서만 사용한다는 조건에서 사용합니다.
    • 클래스를 직렬화 할려면 implements Serializable를 사용해야 됩니다.
    • static 변수는 직렬화 하지 못합니다. 
    • 클래스 중에 직렬화를 하고 싶지 않은 변수에는 transient를 사용합니다.
  2. 문자로 저장
    • 타 프로그램에서도 저장된 객체를 사용 할 수도 있을때 사용합니다.
◆ 직렬화를 사용할 경우
 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는 자동으로 닫힙니다.
◆ 문자로 저장
    try {
     //  "wawoo.txt"로 저장합니다.
      BufferedWriter writer = new BufferedWriter(new FileWriter("wawoo.txt"));
      writer.write("wawoo oops!");
      writer.close();
      
     //  파일 이름이 "wawoo.txt"인 것을 불러옵니다.
      BufferedReader reader = new BufferedReader(new FileReader(new File("wawoo.txt")));
      String line = null;
      while ((line = reader.readLine()) != null) {
       System.out.println(line);
      }
      reader.close();
      
     } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
     }

    《저장》
    • FileWriter를 사용하여 문자 형태로 저장합니다.
    • BufferedWriter를 사용하여 효율을 높입니다. 버퍼를 사용하는 목적중에 하나는 시스템 효율입니다. 버퍼는 box라고 생각하고 박스가 차면 한번에 데이터를 처리한다고 생각하면 됩니다.
    • BufferedWriter를 닫아줍니다.여기서도 역시 BufferedReader만 관리하면 하위단에 있는 FileReader는 자동으로 닫힙니다.
    《가져오기》
    • FileReader를 사용하여 저장된 파일을 연결합니다.
    • BufferedReader를 사용하여 효율을 높입니다.
    • BufferedReader를 닫아줍니다. 

    댓글 없음:

    댓글 쓰기