
와우, 친구들 나는 개병초신보란다.
직렬화 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;
import java.io.Serializable;
/*
* 직렬화할 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;
import java.io.ObjectOutputStream;
import java.util.Base64;
public class SerializedTest {
public static void main(String[] args) {
Animal animal = new Animal("cat", 5, 4);
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 우아한형제들 기술블로그