10.8.1 직렬화 형식(Serialization format)

10.8.1 직렬화 형식(Serialization format)

각 지원 값은 고유한 접두 문자로 변환되고, 필요한 데이터가 뒤따릅니다.

  • null: n
  • Int: 0이면 z, 또는 정수 표시가 뒤따르는 i(예: i456)
  • Float:
    • NaN: k
    • 음의 무한대: m
    • 양의 무한대: p
    • 유한 float: d 뒤에 float 표시(예: d1.45e-8)
  • Bool: truet, falsef
  • String: y 뒤에 url 인코딩된 문자열 길이, 그 다음 :와 url 인코딩된 문자열(예: "hi there"y10:hi%20there)
  • 이름-값 쌍: 직렬화된 이름을 나타내는 문자열 뒤에 직렬화된 값
  • 구조체(structure): o 뒤에 이름-값 쌍 목록, g로 종료(예: {x:2, k:null}oy1:xi2y1:kng)
  • List: l 뒤에 직렬화된 항목 목록, h로 종료(예: 두 null 값을 가진 list는 lnnh)
  • Array: a 뒤에 직렬화된 항목 목록, h로 종료. 여러 연속 null 값에 대해 u 뒤에 null 값 개수가 사용됨(예: [1,2,null,null,null,null,7,null,9]ai1i2u4i7ni9h)
  • Date: v 뒤에 날짜 자체(예: v2010-01-01 12:45:10)
  • haxe.ds.StringMap: b 뒤에 이름-값 쌍, h로 종료(예: {"x" => 2, "k" => null}by1:xi2y1:knh)
  • haxe.ds.IntMap: q 뒤에 키-값 쌍, h로 종료. 각 키는 :<int>로 표현됨(예: {4 => null, 5 => 45, 6 => 7}q:4n:5i45:6i7h)
  • haxe.ds.ObjectMap: M 뒤에 키와 값을 나타내는 직렬화된 값 쌍, h로 종료
  • haxe.io.Bytes: s 뒤에 base64 인코딩된 바이트 길이, 그 다음 :와 코드 A-Za-z0-9%를 사용한 바이트 표현(예: 0과 같은 2바이트는 s3:AAA, haxe.io.Bytes.ofString("Hello !")s10:SGVsbG8gIQ)
  • 예외(exception): x 뒤에 예외 값
  • 클래스 인스턴스: c 뒤에 직렬화된 클래스 이름, 필드의 이름-값 쌍, g로 종료(예: 두 정수 필드 xy를 가진 new Point(0, 0)cy5:Pointy1:xzy1:yzg)
  • enum 인스턴스(이름으로): w 뒤에 직렬화된 enum 이름, 직렬화된 생성자 이름, :, 인자 수, 인자 값들(예: 인자 없는 Foo.Awy3:Fooy1:A:0, Foo.B(4,null)wy3:Fooy1:B:2i4n)
  • enum 인스턴스(인덱스로): j 뒤에 직렬화된 enum 이름, :, 생성자 인덱스(0부터 시작), :, 인자 수, 인자 값들(예: 인자 없는 Foo.Ajy3:Foo:0:0, Foo.B(4,null)jy3:Foo:1:2i4n)
  • 캐시 참조:
    • String: R 뒤에 문자열 캐시의 해당 인덱스(예: R456)
    • 클래스, enum 또는 구조체: r 뒤에 객체 캐시의 해당 인덱스(예: r42)
  • 커스텀: C 뒤에 클래스 이름, 커스텀 직렬화 데이터, g로 종료

캐시된 요소와 enum 생성자는 0부터 인덱싱됩니다.

출처: Serialization format

더 알아보기