직렬화

출처

 

Java의 직렬화

어떤 객체(class)를 byte로 변환하는 것

Java의 역직렬화

직렬화한 Byte를 다시 객체(Class)로 변환하여 JVM 메모리에 들고 있는 것

 

직렬화란?

각 언어의 코드를 하위 레벨의 문자열로 변환하는 것이라고 에둘러 얘기할 수 있을 것이다.

 

직렬화가 필요한 이유

Java객체를 Byte로 변환한 뒤 파일 형태로 저장하고, 다른 시스템에서 가져와 사용할 수 있게 된다.

JVM과 독립적으로 무언가를 저장하고 싶을 때 사용된다.

 

직렬화 예제

import java.io.Serializable;

public class HelloSerialize implements Serializable {}
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Arrays;

public class TestController {
    public static void main(String[] args) throws IOException {

		// 직렬화를 상속받은 클래스를 인스턴스화하여 직렬화를 준비한다
        HelloSerialize helloSerialize = new HelloSerialize();

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(helloSerialize);

        byte [] serialized;
        serialized = byteArrayOutputStream.toByteArray();

		// 클래스를 직렬화하는 코드
        System.out.println("serialized = "+ Arrays.toString(serialized));
        /*
serialized = [-84, -19, 0, 5, 115, 114, 0, 37, 99, 111, 100, 101, 46, 67, 95, 49, 51, 95, 83, 101, 114, 105, 97, 108, 105, 97, 122, 98, 108, 101, 46, 72, 101, 108, 108, 111, 83, 101, 114, 105, 97, 108, 105, 122, 101, 3, 119, -100, -75, -47, -63, 38, -60, 2, 0, 0, 120, 112]
         */
    }
}

java class가 직렬화되어 byte코드로 표기된 것을 확인할 수 있으며,

이 byte를 파일로 저장하거나 다른 시스템에 전송할 수 있다.

예제 깃헙 : https://github.com/waveaway77/KOTLIN2/blob/master/src/code/C_13_Serialiazble/TestController.java