Java

직렬화

yanJuicy 2024. 8. 23. 00:42
반응형

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