JAVA

직렬화(Serialization)

Stater 2019. 10. 24. 09:00

 

직렬화(Serialization)

- 인스턴스의 상태를 그대로 저장하거나 네트웤으로 전송하고 이를 다시 복원(Deserializtion)하는 방식

- ObjectInputStream과 ObjectOuputStream 사용해서 사용.

- 보조 스트림

 

Serializable 인터페이스

- 직렬화는 인스턴의 내용이 외부(파일, 네크워크)로 유출되는 것이므로 프로그래머가 객체의 직렬화 가능 여부를 명시

 

구현 코드가 없는 mark interface

 

class Person implements Serializable(직렬화표시){}

 

예제코드

package serialzation;

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

class Person implements Serializable{
	String name;
	//transient 직렬화 하지 않을 경우 transient을 사용 소켓은 직렬화 x
	transient String job;
	
	public Person(String name, String job) {
		this.name= name;
		this.job = job;
	}
	
	public String toString() {
		return name+","+job;
	}
}

public class SerializationTest {

	public static void main(String[] args) {
		
		Person personLee=new Person("이순신","엔지니어");
		Person personKim = new Person("김유신","선생님");
		
		try(FileOutputStream fos = new FileOutputStream("serial.dat");
				ObjectOutputStream oos = new ObjectOutputStream(fos)){
			oos.writeObject(personLee);
			oos.writeObject(personKim);
		}catch(IOException e) {
			System.out.println(e);
		}
		try(FileInputStream fis = new FileInputStream("serial.dat");
				ObjectInputStream ois = new ObjectInputStream(fis)){
			
			Person p1 = (Person)ois.readObject();
			Person p2 = (Person)ois.readObject();
			
			System.out.println(p1);
			System.out.println(p2);
			
	}catch(IOException e) {
		System.out.println(e);
	}catch(ClassNotFoundException e) {
		System.out.println(e);
	}

	}
}
반응형

'JAVA' 카테고리의 다른 글

Thread class  (0) 2019.10.26
입출력 클래스 및 데코레이터패턴  (0) 2019.10.25
보조 스트림  (0) 2019.10.23
Socket통신 HTTP 통신  (0) 2019.10.22
문자 단위 입출력 스트림  (0) 2019.10.20