Java 직렬화(Serialization)의 원리를 파헤쳐 보자

2009. 9. 9. 09:18Java

원문: http://www.javaworld.com/community/node/2915

마침 매일 즐겨보는 사이트중 하나인 "자바월드" 홈페이지에
Serialization의 대해 Byte 단위로 자세하게 분석해 놓은 글을 보았습니다.

상당히 잘 정리 되어 있군요.

원문을 보면 더 자세하게 보실수 있습니다.

일단 하나의 자바 클래스를 직렬화를 하게 되면,

아래와 같은 단계를 거치게 됩니다.


1. Stream, Object에 대한 버전,정보 데이터 기록
2. 클래스 이름 길이, 이름, Serial Version 정보 기록
3. 각 필드 데이터 기록 예를 들어 int test = 0 ; 이면
   int, test 길이,이름,실제 value 도 기록

4. Parent Class 에대한 정보를 기록
5. Parent Class 에 대한 Field 정보 기록
6. 마무리

라고 볼수 있습니다.
실제 직렬화된 데이터를 Hexa 로 출력해보면 해당 데이터 들을 그대로 볼수 있습니다.

예> 클래스를 직렬화 한후 Hexa Editor로 열어본 내용(첫부분)
AC ED 00 05 73 72 00 0A 53 65 72 69 61 6C 54 65
73 74 05 52 81 5A AC 66 02 F6 02 00 02 49 00 07
76 65 72 73 69 6F 6E 4C 00 03 63 6F 6E 74 00 09
4C 63 6F 6E 74 61 69 6E 3B 78 72 00 06 70 61 72
65 6E 74 0E DB D2 BD 85 EE 63 7A 02 00 01 49 00
0D 70 61 72 65 6E 74 56 65 72 73 69 6F 6E 78 70
00 00 00 0A 00 00 00 42 73 72 00 07 63 6F 6E 74
61 69 6E FC BB E6 0E FB CB 60 C7 02 00 01 49 00
0E 63 6F 6E 74 61 69 6E 56 65 72 73 69 6F 6E 78
70 00 00 00 0B

AC ED => 프로토콜

00 05 => 직렬화 버전

0x73 => Object에 대한 정보

등등 각 Byte 단위로 저장된 데이터를 볼수 있습니다.

An outline of the serialization algorithm