직렬화(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 |