예제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();
}
}
'JAVA > basic' 카테고리의 다른 글
스레드 / 쓰레드 / thread (0) | 2020.10.27 |
---|---|
[ 입출력 ] 버퍼 스트림 (0) | 2020.10.26 |
[ 입출력 ] File (0) | 2020.10.26 |
[ 입출력 ] 문자스트림 : BufferedWriter / BufferedReader / PrintWriter (0) | 2020.10.26 |
[ 입출력 ] Stream / 바이트스트림 (0) | 2020.10.26 |
Map <K, V> / HashMap <K, V> key-value (0) | 2020.10.23 |
[ 컬렉션 Collection<E> ] TreeSet (0) | 2020.10.23 |