출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

예제1)

package io;

import java.io.Serializable;

public class Circle implements Serializable{
	
	//implements Serializable : 직렬화의 대상이다. 인스턴스 저장이 가능하다.
	// 직렬화를 하기 위해서는 반드시 해줘야함..
	
	int x;
	int y;
	double rad;
	
	public Circle(int x, int y, double r) {
		this.x=x;
		this.y=y;
		this.rad=r;
	}
	

	public void showCircleInfo() {
		System.out.printf("[%d,%d]", x,y);
		System.out.println("rad : " +  rad);
		
	}

}
package io;

import java.io.Serializable;

public class Circle2 implements Serializable {

	// implements Serializable : 직렬화의 대상이다. 인스턴스 저장이 가능하다.
	// 직렬화를 하기 위해서는 반드시 해줘야함..

	// transient Point p; 직렬화대상에서 제외
	Point p;
	double rad;

	public Circle2(int x, int y, double r) {
		p = new Point(x, y);
		this.rad = r;
	}

	public void showCircleInfo() {
		System.out.println("rad : " + rad);

	}

}
package io;

import java.io.Serializable;

public class Point implements Serializable {

	int x;
	int y;

	public Point(int x, int y) {
		this.x = x;
		this.y = y;

	}

}
package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectSerializable {

	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		
		// 인스턴스 저장을 위한 스트림 생성
		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Object.ser"));
		
		// 인스턴스를 저장
		out.writeObject(new Circle(1,1,2.4));
		out.writeObject(new Circle(2,2,4.8));
		out.writeObject(new String("String class implements Serializable"));
		// String 클래스도 직렬화 가능
		out.writeObject(new Circle2(3,3,6.9));
		
		out.close(); // 저장~!
		
		// 인스턴스 복원
		ObjectInputStream in = new ObjectInputStream(new FileInputStream("Object.ser"));
		
		
//		Circle c1 = (Circle) in.readObject(); // 형변환
		Object o1 = in.readObject();
		Circle c1 =null;
		if(o1 instanceof Circle) {
			c1 = (Circle)o1;
		}
		
		
		Circle c2 = (Circle) in.readObject();
		String str= (String) in.readObject();
		
		Object o2 = in.readObject();
		Circle2 c3=null;
		
		if(o2 instanceof Circle2) {
			c3= (Circle2)o2;
		}
		
		// 복원된 인스턴스 출력
		
		c1.showCircleInfo();
		c2.showCircleInfo();
		System.out.println(str);
		c3.showCircleInfo();
		
		
	}
}

예제2)

 

package io;

import java.beans.Transient;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class PersonInfo implements Serializable {

	String name;
	transient String secretInfo;
	int age;
	transient int secretNum;

	public PersonInfo(String name, String secretInfo, int age, int secretNum) {
		this.name = name;
		this.secretInfo = secretInfo;
		this.age = age;
		this.secretNum = secretNum;
	}

	public void showInfo() {
		System.out.println("name : " + name);
		System.out.println("secretInfo : " + secretInfo);
		System.out.println("age : " + age);
		System.out.println("secretNum : " + secretNum);

	}

	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		// 인스턴스 저장 스트림 생성
		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("PersonInfo.ser"));

		PersonInfo info = new PersonInfo("김태형", "뽀선이애인", 24, 1);
		info.showInfo();

		// 인스턴스 저장
		out.writeObject(info);
		out.close();

		// 인스턴스 복원을 위한 스트림 생성
		ObjectInputStream in = new ObjectInputStream(new FileInputStream("PersonInfo.ser"));

		// 복원
		PersonInfo reInfo = (PersonInfo) in.readObject();

		// 복원된 인스턴스의 정보 출력
		reInfo.showInfo();

	}

}

+ Recent posts