[17일차] 자바 - 직렬화 (Serialization), 역직렬화 (Deserialization)

SOSO·2022년 5월 10일
0

학원

목록 보기
16/59
post-thumbnail

Serializable

Serializable 인터페이스를 구현한 클래스를 작성하면 해당 클래스의 모든 멤버변수가 직렬화 대상이 된다.
객체가 스트림을 통해 직렬화 될 때는 객체에 있는 멤버변수가 직렬화 되는 것이다.

직렬화 (Serialization)

객체를 스트림으로 만드는 작업



import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class SerialMain01 {
	public static void main(String[] args) {
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
		
		//직렬화할 객체 생성
		UserInfo u1 = new UserInfo("가나다",10,"ㄱㄴㄷ");
		UserInfo u2 = new UserInfo("abc",20,"ABC");
		
		ArrayList<UserInfo> list = new ArrayList<UserInfo>();
		list.add(u1);
		list.add(u2);
		try {
			fos = new FileOutputStream("userInfo.ser");
			oos = new ObjectOutputStream(fos);
			
			//객체 직렬화
			oos.writeObject(list);
		
		
		}catch(IOException e) {
			e.printStackTrace();
		}finally {
			//자원정리
			if(oos!=null)try {oos.close();}catch(IOException e) {}
			if(fos!=null)try {fos.close();}catch(IOException e) {}
		}
	}
}

프로그램 실행 결과


역직렬화 (Deserialization)

스트림을 객체로 만드는 작업



import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

public class SerialMain02 {
	public static void main(String[] args) {
		FileInputStream fis = null;
		ObjectInputStream ois = null;
		
		try {
			fis = new FileInputStream("userInfo.ser");
			ois = new ObjectInputStream(fis);
			
			//역직렬화 수행
			ArrayList<UserInfo> list = 
					         (ArrayList<UserInfo>)ois.readObject();
			System.out.println(list);
			
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}finally {
			//자원정리
			if(ois!=null)try {ois.close();}catch(IOException e) {}
			if(fis!=null)try {fis.close();}catch(IOException e) {}
		}
	}
}

출력 결과

[이름 : 가나다, 나이 : 10, 주소 : ㄱㄴㄷ, 이름 : abc, 나이 : 20, 주소 : ABC]
profile
한다 열심히

0개의 댓글