본문 바로가기

Java/class

[Java] Serialize(직렬화) 작성 중

와우, 친구들 나는 개병초신보란다.

 

직렬화 Serialize를 알아보자.

 

직렬화란

- 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터 변환하는 기술과 byte로 변환된 Data를 다시 객체로 변환하는 기술(역직렬화)을 뜻함. 

 

 

 

자바 직렬화 조건

자바 기본(primitive) 타입과 java.io.Serializable 인터페이스를 상속받는 객체는 직렬화 할 수 있는 기본 조건을 가진다고 한다.

 

예시)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package kr.co.dong;
 
 
/*
* 직렬화할 Animal 클래스
 */
 
public class Animal implements Serializable{
    private String name;
    private int age;
    private int legNum;
    
    public Animal(String name, int age, int legNum) {
        this.name = name;
        this.age = age;
        this.legNum = legNum;
    }
    
    // Getter 생략
    
    @Override
    public String toString() {
        return String.format("Member{name='%s', age='%s', legNum='%s'}", name, age, legNum);
    }
}
 
 
cs

 

 

 

 

 

직렬화 방법

자바 직렬화는 java.io.ObjectOutputStream 객체를 이용한다.

 

위에서 만든 Animal 클래스 이용해서 참고 예제 따라 해본 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package kr.co.dong;
 
 
public class SerializedTest {
 
    public static void main(String[] args) {
        Animal animal = new Animal("cat"54);
        byte[] serializedAnimal = null;
        
        try(ByteArrayOutputStream baos = new ByteArrayOutputStream()){
            try(ObjectOutputStream oos = new ObjectOutputStream(baos)){
                oos.writeObject(animal);
                // serializedAnimal -> 직렬화된 Animal 객체
                serializedAnimal = baos.toByteArray();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
        
        // 바이트 배열로 생성된 직렬화 데이터를 base64로 변환
        System.out.println(Base64.getEncoder().encodeToString(serializedAnimal));
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
cs

 

결과값: rO0ABXNyABFrci5jby5kb25nLkFuaW1hbDywo2TWVnPGAgADSQADYWdlSQAGbGVnTnVtTAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwAAAABQAAAAR0AANjYXQ=

 

 

바이트 배열로 생성된 직렬화 데이터를 base64로 변환해서 위와 같은 결과값이 출력된듯하다.

 

 

 

 

 

 

.. 천천히 보다가 너무 어려워서ㅜ_ㅜ 일단 보류

 

 

작성중..... ㅜ_ㅜ 

 

 

출처, 도움 : http://woowabros.github.io/experience/2017/10/17/java-serialize.html 우아한형제들 기술블로그