이 글은 타 블러그에서 펌온 글 입니다.
가능하면 원글 보세요.
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);
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 |