직렬화

조수경·2021년 11월 15일
1

고급자바

목록 보기
41/97
package kr.or.didt.basic;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class ObjectIOTest {

	public static void main(String[] args) {

		//Member의 인스턴스 생성
		Member mem1 = new Member("홍길동", 20, "대전");
		Member mem2 = new Member("홍길서", 30, "서울");
		Member mem3 = new Member("홍길남", 40, "인천");
		Member mem4 = new Member("홍길북", 50, "강릉");
		
		try {
			
			//객체를 파일에 저장하기
			FileOutputStream fout = 
					new FileOutputStream("d:/d_other/memObj.bin");
			BufferedOutputStream bout = new BufferedOutputStream(fout);
			ObjectOutputStream oout = new ObjectOutputStream(bout);
			
			//쓰기 작업 시작
			System.out.println("객체 저장하기 시작...");
			oout.writeObject(mem1);
			oout.writeObject(mem2);
			oout.writeObject(mem3);
			oout.writeObject(mem4);
			System.out.println("객체 저장 작업 끝...");
			
			oout.close(); //스트림 닫기
		}catch(IOException e){
			
		}
		//-------------------------------------------------
		
		
		try {
			//저장된 객체를 읽어와 그 내용을 화면에 출력하기
			
			//입력용 스트림 객체 생성
			ObjectInputStream oin = new ObjectInputStream(
					new BufferedInputStream(
							new FileInputStream("d:/d_other/memObj.bin")
							
							)
					);
			
			Object obj; //읽어온 객체를 저장할 변수
			System.out.println("객체 읽기 작업 시작...");
			
			// readObject() 메서드가 데이터를 끝까지 다 읽어오면
			// EOFException이 발생한다.
			
			while((obj=oin.readObject()) != null){
				//읽어온 데이터를 원래의 객체형으로 변환 후 사용한다.
				Member mem = (Member)obj;
				
				System.out.println("이름 : "+mem.getName());
				System.out.println("나이 : "+mem.getAge());
				System.out.println("주소 : "+mem.getAddr());
				System.out.println("----------------------------------");
				
			}
			
		} catch (EOFException e) {
			System.out.println("객체 읽기 작업 끝...");
		} catch (IOException e) {
			// TODO: handle exception
		} catch (ClassNotFoundException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
		
	}

}


class Member implements Serializable{

	private static final long serialVersionUID = -1897325747229471910L;
	
	//transient ==> 직렬화가 되지 않을 멤버변수에 지정한다.(객체를 저장하기 위해서 사용하는 것)
	//       직렬화가 되지 않은 멤버변수는 기본값으로 저장된다.
	//       (참조변수 ==> null, 숫자유형변수 => 0)
	private String name;
	private  int age;
	private  String addr;
	
	public Member(String name, int age, String addr) {
		super();
		this.name = name;
		this.age = age;
		this.addr = addr;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
	
	
	
}



profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보