반응형
Serialization
인스턴스의 상태를 그대로 파일로 저장하거나 네트워크로 전송(serialization)하고 이를 다시 복원(deserialization)하는 방식
자바에서는 보조 스트림을 활용해 직렬화를 제공한다
생성자 | 설명 |
---|---|
ObjectInputStream(InputStream in) | InputStream을 생성자의 매개변수로 받아 ObjectInputStream을 생성합니다. |
ObjectOutputStream(OutputStream out) | OutputStream을 생성자의 매개변수로 받아 ObjectOutputStream을 생성합니다. |
Serializable 인터페이스
구현 코드가 없는 marker interface
다
transient
키워드를 통해 직렬화 하지 않는 멤버 변수를 지정한다(Socket 등 직렬화 할 수 없는 객체)
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 {
private static final long serialVersionUID = -14209347589321L;
String name;
String job;
public Person() {
}
public Person(String name, String job) {
this.name = name;
this.job = job;
}
@Override
public String toString() {
return name + ", " + job;
}
}
public class SerializationTest {
public static void main(String[] args) {
Person person1 = new Person("이순신", "대표이사");
Person person2 = new Person("김유신", "상무이사");
try (FileOutputStream fos = new FileOutputStream("serial.out");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(person1);
oos.writeObject(person2);
} catch (IOException e) {
e.printStackTrace();
}
try (FileInputStream fis = new FileInputStream("serial.out");
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) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
반응형
'Java' 카테고리의 다른 글
예외 처리하기와 미루기 (0) | 2024.08.24 |
---|---|
예외 처리 (0) | 2024.08.23 |
멀티 Thread 동기화 (0) | 2024.08.22 |
Thread 클래스의 여러 메소드 (0) | 2024.08.15 |
여러가지 보조 스트림 (0) | 2024.08.10 |