본문 바로가기

기존카테고리/JAVA

객체직렬화(Serializable) 사용방법 & 이유(펌)

이 글은 타 블러그에서 펌온 글 입니다.

가능하면 원글 보세요.


https://m.blog.naver.com/tkddlf4209/220486811351


--------------------------------------------------------------------------------------------------------------




* Serializable 

객체를 직렬화하기위해서는 Serializable인터페이스를 이용한다.

객체단위로 데이터를 저장합니다


직렬화에서 빼고 싶다면 transient 사용하면 직렬화에서 빠지게 됩니다.

ObjectOutputStream는 Serializble인터페이스를 implements해주어준 것만 사용이가능합니다.


* 똑같은 클래스파일을 가지고있어야 Serializable된 데이터를 읽을 수 있다. ex) 항공기 블랙박스 // 아무나 해석이가능하면안된다.


Serialize(직렬화) : 객체 단위로 스트림을 통해서 전송하는 것

객체 단위로 파일에 저장할 수 있고 네트워크를 통해서 전송할 수 있도록 해줍니다.

자바에서는 Serializble 인터페이스가 이 역할을 수행합니다.




* Serializable한 DTO 클래스를 하나 만들어 줍시다.




package jsp_practice;


import java.io.Serializable;


//Serializable은 객체직렬화를 위한 인터페이스인데

//메소드 구현이 필요없는 인터페이스

//구현을 내부적으로 자바가 해줍니다.

public class BookVO implements Serializable{


  private String bookName;

  private String num;

  public String getBookName() {

      return bookName;

  }

  public void setBookName(String bookName) {

      this.bookName = bookName;

  }

  public String getNum() {

      return num;

  }

  public void setNum(String num) {

      this.num = num;

  }

  @Override

  public String toString() {

      return "BookVO [bookName=" + bookName + ", num=" + num + "]";

  } 

  

}



os= new FileOutputStream("./text.txt");

데이터를 넣을 수 있는 text.txt파일을 하나 만들어줍시다.

oos= new  ObjectOutputStream(fos);

이를 ObjectOutputStream의 매개변수로 넣어줍니다.

이제 oos변수의 메서드를 이용해서 객체타입으로 데이터를 넣을 수 있습니다

BookVO bv = new BookVO();

bv.setNum("123456789");

BookVO 객체를 하나 만들어서 setNum 메서드로 데이터를 넣어줍니다

oos.writeObject(bv);

데이터를 넣은 bv 객체를 writeObject 메서드를 통해 넣어줍니다.


* 여기까지 BookVo객체 타입으로 test.txt파일에 데이터를 넣어주었습니다. 

* 이때 데이터는 암호화되어서 들어가기 때문에 데이터의 내용을 보기위해서는 BookVo클래스 파일이 필요합니다.

   * 암호화 되어 데이터가 들어가있습니다.



* 객체직렬화된 데이터를 읽어 봅시다

fis =new FileInputStream("./text.txt");

ois = new ObjectInputStream(fis);

데이터를 가져오는 형태는 이전 형태와 동일합니다


BookVO i = (BookVO)ois.readObject();

받아온 데이터를 (BookVO)타입으로 강제 캐스팅합니다

System.out.printf("읽은 데이터 : %s\n",i);

i에는 BookVO 객체가 들어있고 이를 불러오게되면 BookVO 클래스에서 미리 정의한 toString() 메서드가 호출되어 내부 데이터를 확인할 수 있습니다.

 
  * 이를 통해 들어있는 데이터를 확인할 수 있습니다.


package jsp_practice;



import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;


public class ObejctReadWrite {


public static void main(String[] args) {

       // TODO Auto-generated method stub

       FileOutputStream fos = null;

       ObjectOutputStream oos = null;

       try {

           fos= new FileOutputStream("text.txt");

           oos= new  ObjectOutputStream(fos);    

           BookVO bv = new BookVO();

           bv.setNum("123456789");

           oos.writeObject(bv); // string이 serializable을 구현했기때문에 사용가능

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           try{

               oos.close();

           }catch(Exception e){}

       }

       

       

       FileInputStream fis = null;

       ObjectInputStream ois =null;

       try {

           fis =new FileInputStream("./text.txt");

           ois = new ObjectInputStream(fis);

           

           BookVO i = (BookVO)ois.readObject();

           System.out.printf("읽은 데이터 : %s\n",i);

           

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           try {

               fis.close();

           } catch (IOException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

           }

       }

       

       

       

 

   }


}



'기존카테고리 > JAVA' 카테고리의 다른 글

상속  (0) 2020.03.29
GenericDemo  (0) 2017.06.28