직렬 화 약술

직렬 화 방법 이 다 르 기 때문에 주로 클 라 이언 트 와 서버 가 정 보 를 전달 하고 공유 하 는 방식 이 다르다.
정보 기술 의 모든 요소
protobuf 가 설명 한 person 을 예 로 들 면:
message Person {
  required string name = 1;
  optional int32 id = 2;
  repeated string email = 3;
}

직렬 화 된 정보 는
  • 어떤 데이터 세그먼트 가 있 습 니까?
  • 데이터 세그먼트 가 중복 되 어야 하 는 지 여부.
  • 각 데이터 세그먼트 가 어떤 유형 인지 길이 (또는 길 이 를 판단 하 는 방법, 예 를 들 어 string 이 고정 길이 가 없 음)
  • 모든 데이터 세그먼트 의 이름 은 문자열 입 니 다. 예 를 들 어 "name", "id", "email"
  • 데이터 세그먼트 의 id 는 123 으로 표시 되 어 있 으 며, 바 이 너 리 흐름 에 대응 하 는 필드 를 표시 하 는 데 사 용 됩 니 다.
  • 사실 이름 도 필드 를 표시 할 수 있 습 니 다. 전송 과정 에서 필드 의 이름 이 표시 되면 id 가 필요 없습니다. AMF 인 코딩 은 이 렇 습 니 다. 하지만 이름 은 문자열 이 차지 하 는 공간 이 넓 기 때문에 직렬 화 방법 은 id 를 사용 합 니 다.
    사실 모든 필드 가 필요 하 다 면 순서대로 해석 하면 됩 니 다. id 가 필요 없습니다.
    optionel 필드 가 있 으 면 null 일 때 특수 한 인 코딩 표 지 를 사용 하고 순서대로 해석 하 며 id 가 필요 하지 않 습 니 다.
    정보 가 담 긴 3 곳.
    전체 직렬 화 과정 에서 3 개의 대부분의 정 보 를 포함 하 는 형식 이 있 는데 마치 대상 을 대상 으로 정 보 를 '클래스' 와 '대상' 으로 나 누 는 것 과 같이 이 3 자 도 비슷 한 구분 을 할 수 있다.
  • 대상 이 대응 하 는 언어 에서 의 클래스 와 대상. (클래스 1, 대상 1)
  • 플랫폼 언어 와 무관 성 을 유지 하기 위해 정보 조직 방식 을 독립 적 으로 묘사 하 는 언어 를 scheama 라 고 할 수 있 습 니 다. 예 를 들 어 protobuf 의 'proto 파일' (클래스 2 정보 만 있 고 대상 정보 가 없습니다)
  • 직렬 화 된 전송 또는 저장 에 사용 되 는 바 이 너 리 흐름 이나 텍스트 (대상 3) 는 3 가지 형식 이 있 습 니 다.
  • 서열 화 는 대상 1 과 대상 3 사이 의 상호 전환 만 이 필요 하 다.
    직렬 화 된 3 가지 형식 은 데이터, 길이, 필드 이름, 유형 이 어디 에 저장 되 는 지 에 따라 분류 된다. 그 중에서 데이터 와 길 이 는 반드시 직렬 화 된 데이터 에 있 기 때문에 필드 이름과 유형 정 보 를 어디 에 두 느 냐 에 따라 디 코딩 단 에서 얻 을 수 있다.
  • 각 필드 는 직렬 화 흐름 에 직접 저장 되 고 길이 와 데이터 만 있 으 며 필드 이름과 유형 은 모두 하 드 코딩 입 니 다.
  • protobuf 와 같이 필드 마다 id 를 가리 키 고 유형 정 보 는 큰 종류 만 가리킨다.
  • AMF 또는 XML 은 필드 마다 name 및 유형 정 보 를 포함 하여 (클래스 3) 의 정 보 를 포함 하 는 것 과 같 습 니 다.
  • protobuf 에 도 Self - describing Messages 가 있 는 것 을 발 견 했 습 니 다. FileDescriptor Set + DynamicMessage 를 통 해 이 루어 집 니 다.
    서열 화 된 세 가지 방법
    서열 화 는 일반적으로 네 가지 방식 이 있다.
  •  클 라 이언 트 와 서버 는 모두 사용자 가 알 고 있 는 정보 형식 에 따라 직렬 화 코드 를 작성 합 니 다.
  • protobuf 와 같이 도 구 를 사용 하여 설명 언어 에서 정보 형식 을 얻 고 대응 하 는 언어의 직렬 화 코드 로 컴 파일 합 니 다.
  • AMF 인 코딩 처럼 이름, 값, 유형의 모든 정 보 를 포함 하고 자신 은 정보 형식 을 포함 하 며 직렬 화 코드 는 통일 적 으로 처리 할 수 있 으 며 각 유형 이나 RPC 가방 을 인위적으로 처리 할 필요 가 없다.
  • 동적 해석. proto 를 직렬 화 하 는 방식 으로 생 성 된 대상 은 대응 하 는 클래스 가 없고 AMF 의 Objec 또는 lua 의 table 에 해당 하 며 c + + 에 대응 하 는 것 은 KV 를 저장 하 는 hashtable 입 니 다.

  • 2 1 , , , , (c++ ) 。

    , ( )。

    3 AMF Object, 。

    protobuf Self-describing Messages 3 。


    , 3

    1.protobuf

    , 。

    , ,name id

    , name K , 。

    , .proto, , 。

    2.amf

    , , V。

    , name 。

    , hashtable , K,V。

    , 。

    3. .proto

    , .proto , .proto, .proto , V。 .proto, 。

    , 1。

    , 2。

    , .proto, 。


    XML

    json

    AMF

    Avro

    json scheama, protobuf scheama 。Avro , , 、 。 RPC Avro , 。 , 、 。

    protobuf Self-describing Messages,scheama AMF , scheama 。


    thrift

    protobuf


    。 Flash , AMF , , , Schema, 。

    , 。

    xml、json、amf, 3 KV 。xml , key, 。json key。amf 。

    , amf 。


    , , 1 , 2 protobuf 。

    1. , 。

    2. , 。

    , AMF , 1 。 2 。

    1 , id, id1, id2, id3。

    , :1. 。2.id 3。3.x。4.y。5. id。


    Flash ( )—— , xml, ?

    좋은 웹페이지 즐겨찾기