Serializable 인터페이스를 구현한 클래스를 작성하면 해당 클래스의 모든 멤버변수가 직렬화 대상이 된다.
객체가 스트림을 통해 직렬화 될 때는 객체에 있는 멤버변수가 직렬화 되는 것이다.
객체를 스트림으로 만드는 작업
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) {}
}
}
}
스트림을 객체로 만드는 작업
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]