ObjectInputStream / ObjectOutStream란?
- 객체를 입출력하는 용도의 바이트 기반 보조 스트림
(바이트 기반 == 1byte 단위)
(보조 스트림 == 혼자 사용 불가, 기반 스트림과 같이 사용 !)
1) 직렬화(Serializable)
- 스트림을 통과하려는 객체(Object)를
직렬(직선) 형태로 변환하는 것
[직렬화 방법]
- 스트림을 통과하려는 객체에게
Serializable 인터페이스를 상속받게 하면된다
2) 역직렬화
- 직렬화된 객체를 다시 정상 객체 형태로 바꾸는 것
[역직렬화 방법]
- ObjectInputStream을 이용해서
"직렬화"된 객체를 읽어오게 되면
자동으로 "역직렬화"가 수행됨
#예제1 객체를 외부 파일로 출력
public void objectOutput() {
// 출력용 스트림 참조 변수 선언
FileOutputStream fos = null; // 기반
ObjectOutputStream oos = null; // 보조
try {
// 출력할 Member 객체 생성
Member member = new Member("member01", "pass01", "홍길동", 20);
// 폴더가 없으면 생성
String folder = "/io_test/object";
File f = new File(folder);
if(!f.exists()) { // 폴더가 없다면
f.mkdirs(); // 경로상 없는 폴더 모두 생성
}
// 출력 스트림 객체 생성
//
fos = new FileOutputStream(folder + "/Member.dat");
// /io_test/object/Member/dat
// .dat 확장자 : data를 담고있는 파일을 나타내는 확장자
oos = new ObjectOutputStream(fos);
/* Member 객체 파일로 출력하기*/
oos.writeObject(member); // 객체 출력
System.out.println("Member 객체 출력 완료");
}catch(Exception e) {
e.printStackTrace();
}finally {
// 스트림 닫기
try {
if(oos != null) oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
#예제2 파일에서 Member 객체 읽어오기
[service]
public void objectInput() {
// 스트림 참조 변수 선언
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
// 스트림 객체 생성
fis = new FileInputStream("/io_test/object/Member.dat");
ois = new ObjectInputStream(fis);
// 직렬화된 객체를 읽어와
// 역질렬화 후 Member 타입으로 다운 캐스팅
Member member = (Member)ois.readObject();
// 확인
System.out.println(member);
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(ois != null) ois.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
#결과

'BackEnd > Java' 카테고리의 다른 글
| [Servlet/JSP]JSP란? (0) | 2024.08.16 |
|---|---|
| [Servlet/JSP]Servlet 정의 (0) | 2024.08.16 |
| [Java]입출력(IO) Stream (0) | 2024.08.12 |
| [Java]입출력(IO) (0) | 2024.08.12 |
| [Java]예외처리(exception) 사용자 정의 예외 (0) | 2024.08.12 |