고급 JAVA

JAVA - 입출력 - 객체입출력 보조 스트림 예제

햄찌개 2020. 9. 29. 10:27
public class T15_ObjectsStreamTest {
	
	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("성춘향", 20, "제주");
		
		try {
			//객체를 파일에 저장하기
			
			//출력용 스트림 객체 생성
			ObjectOutputStream oos = new ObjectOutputStream(
										new BufferedOutputStream(
												new FileOutputStream("d:/D_Other/memObj.bin")));
			
			//쓰기 작업 
			oos.writeObject(mem1);//직렬화
			oos.writeObject(mem2);//직렬화
			oos.writeObject(mem3);//직렬화
			oos.writeObject(mem4);//직렬화
			
			System.out.println("쓰기 작업 완료");
			oos.close();
			
			//====================================================
			//저장한 객체를 읽어와 출려갛기
			
			//입력용 스트림 객체 생성
			ObjectInputStream ois =
					new ObjectInputStream(
							new BufferedInputStream(
									new FileInputStream("d:/D_Other/memObj.bin")));
			
			Object obj = null;
			
			try {
				while ((obj =ois.readObject())!=null) {
					//읽어온 데이터를 원래의 객체형으로 변환 후 사용한다.
					Member mem = (Member)obj;
					System.out.println("이름 : "+mem.getName());
					System.out.println("나이 : "+mem.getAge());
					System.out.println("주소 : "+mem.getAddr());
					System.out.println("==================================");
					

				}
				ois.close();
			} catch (ClassNotFoundException e) {
			}
		} catch (IOException e) {
			//더이상 읽어올 객체가 없으면 예외 발생함 
			e.printStackTrace();
			System.out.println("출력 작업 끝...");
		}
		
		
	}

}

/**
 *	회원정보VO
 */
class Member implements Serializable{	
				//자바는 Serializale 인터페이스를 구현한 객체만 직렬화 할 수 있도록 제한하고 있다..

	/**
	 * transient => 직렬화가 되지 않을 멤버 변수에 지정한다.
	 * 			(* static 필드도 직열화가 되지 않는다.)
	 * 			직렬화가 되지 않는 멤버변수는 기본값으로 저장된다.
	 * 			(참조변수 : null, 숫자형 변수 :0)
	 */
	private transient String name ;	// transient사용으로 이름은 직렬화에서 뺀다  -> null로 출력
	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;
	}
	
	
	
}