ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java Serialization] 여러가지 자바 직렬화 해석 방식들
    Java 2024. 7. 6. 07:05
    반응형

    - 목차

     

    https://docs.oracle.com/en/java/javase/17/docs/specs/serialization/protocol.html

     

    Java Object Serialization Specification: 6 - Object Serialization Stream Protocol

    A set of flags indicating various properties of the class, such as whether the class defines a writeObject method, and whether the class is serializable, externalizable, or an enum type

    docs.oracle.com

     

    sr (73 72) 로 시작하는 바이트 스트림.

    아래와 같은 형식으로 아스키코드로 sr 또는 Byte 포맷으로 73, 72 로 표현되는 형식이 있습니다. 

    AC ED 00 05 73 72 00 18 63 6F 6D 2E 77 65 73 74 6C 69 66 65 2E 74 65 73 74 2E 50 65 72 73 6F 6E 00 00 00 00 00 00 00 01 02 00 02 49 00 03 61 67 65 4C 00 04 6E 61 6D 65 74 00 12 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 78 70 00 00 00 19 74 00 05 41 6C 69 63 65 
    ��srcom.westlife.test.PersonIageLnametLjava/lang/String;xptAlice

     

    숫자 73은 TC_OBJECT (Type Code Object) 를 의미하며, 이는 16진수로 표현된 코드입니다.

    이는 직렬화된 하나의 객체를 가리킵니다.

    또한 TC_OBJECT 와 함께 TC_CLASSDESC 인 72 코드도 함께 사용되는데요.

    이는 사용된 클래스의 Fully Qualified Name 을 의미하게 됩니다.

    final static byte TC_CLASSDESC = (byte)0x72;
    final static byte TC_OBJECT = (byte)0x73;

     

     

     

    문자열의 데이터는 t 또는 0x74 로 시작한다.

    문자열을 표현하는 방식은 아래와 같습니다. 

    먼저 String 데이터의 시작을 표현하는 0x74 또는 아스키 코드인 t 입니다.

    final static byte TC_STRING = (byte)0x74;

     

    그리고 문자열의 길이가 표시됩니다.

    만약에 5자리의 문자열이라면 아래와 같이

    "74 + 00 05 + Alice" 와 같이 표시됩니다. (Alice -> 41 6C 69 636 65)

    74 00 05 41 6C 69 63 65 78

     

    즉, 2bytes 를 사용하여 문자열의 길이를 표시합니다.

     

    그리고 마지막으로 0x78 또는 x 를 추가하여 데이터의 종료를 마킹합니다. 

    final static byte TC_ENDBLOCKDATA = (byte)0x78;

     

    반응형
Designed by Tistory.