Google Protobuf 프로필 및 사용

5866 단어
1. 프로필
Protocol Buffers 는 데이터 구 조 를 직렬 화 하 는 방법 이다.도선 이나 저장 데 이 터 를 통 해 통신 하 는 프로그램 개발 에 유용 하 다.이 방법 은 인터페이스 설명 언어 를 포함 하고 데이터 구 조 를 설명 하 며 프로그램 도 구 를 제공 하여 이 설명 에 따라 코드 를 만들어 데이터 구 조 를 만 들 거나 데이터 흐름 을 분석 하 는 데 사용 합 니 다.
우선, protobuf 는 * * 오픈 소스 프로젝트 (공식 사이트 가 '여기') 이 고 배경 이 단단 한 오픈 소스 프로젝트 입 니 다.인터넷 에 현존 하 는 대부분 (적어도 80%) 의 개원 프로젝트 는 누군가가 단독으로 하거나 몇 명의 잡역부 등 이 공동으로 한다.protobuf 는 그렇지 않 습 니 다. 유명한 구 글 회사 가 개발 하고 구 글 내부 에서 오 랜 시련 을 겪 은 곳 입 니 다.이 를 통 해 알 수 있 듯 이, 그것 의 작 가 는 결코 일반 잡역부 등 과 비교 할 수 있 는 것 이 아니다.그럼 이 소 X 로 들 리 는 동 동 은 도대체 무슨 소 용이 있 습 니까?쉽게 말 하면 이 동쪽 에서 하 는 일 은 XML * * 와 차이 가 많 지 않다. 즉, 특정한 데이터 구조의 정 보 를 특정한 형식 으로 저장 하 는 것 이다.주로 데이터 저장, 전송 프로 토 콜 형식 등에 사용 된다.어떤 학생 은 심리 적 으로 중 얼 거 렸 을 것 이다. 멀쩡 한 XML 을 두 고 쓰 지 않 고 왜 바퀴 를 다시 발명 하 느 냐?!우선 서 두 르 지 마라, 뒤에 내 가 당연히 말 할 것 이다.그런데 작년 (약 08 년 7 월) 에 구 글 은 갑자기 자 비 를 베 풀 어 이 좋 은 물건 을 개원 커 뮤 니 티 에 기여 했다.이제 나 처럼 이미 만들어 진 것 을 주 우 는 것 을 좋아 하 는 녀석 은 정말 복 이 있 을 거 야!이미 만들어 진 것 을 주 우 는 것 을 좋아 하 는 녀석 들 이 꽤 많은 것 같 고, 게다가 구 글 의 호소력 까지 겹 쳐 개원 한 지 1 년도 안 돼 프로 토 버 프 의 인기 가 뜨겁다.그래서 나 는 시대와 함께 나 아가 기 위해 단독으로 댓 글 을 달 아 어슬 렁 거 렸 다.인용
ProBuffer 는 두 가지 버 전 으로 나 뉘 어 져 있 습 니 다.
  • pro2
  • pro3

  • 2. 설치
    여기 찍 어 주세요.
    3. 데이터 형식
    유형
    C + + 형식
    Java 형식
    double
    double
    double
    float
    float
    float
    int32
    int32
    int
    int64
    int64
    long
    ....
    4. 사용
    4.1 어떤 모습 인지 살 펴 본다
    message Person { 
        required string name = 1; //   
        required int32 id = 2; //  id
        optional string email = 3;//    
    }
    
    message: 메시지 의 정 의 를 나타 낸다.required: 이 매개 변 수 는 필수 적 이 고 값 이 없 으 면 모두 비어 있 음 을 나타 낸다.optional: 이 매개 변 수 는 선택 할 수 있 고 영향 이 없 는 것 같 습 니 다. 값 은 null 입 니 다.repeated: 이것 은 배열 을 생 성 합 니 다.//: 주석 이 매개 변수 뒤에 하나의 tag 를 따라 간 다 는 뜻 입 니 다. 1 부터 각 tag 는 115 에서 1 개의 바이트, 162047 은 2 개의 바이트 를 사용 합 니 다.그래서 우리 가 사용 할 때 자주 나타 나 는 필드 에 1 ~ 15 이 tag 를 사용 하도록 해 야 합 니 다. 가장 작은 tag 수 치 는 1 이 고 가장 큰 수 치 는 2 ^ 29 - 1 입 니 다.
    명령 을 통 해 대응 하 는 model 을 생 성 할 수 있 습 니 다.
  • objc_out 은 출력 Object - C 파일
  • 을 표시 합 니 다.
  • java_출력 자바 파일...
  • protoc --plugin=/usr/local/bin/protoc-gen-objc a.proto --objc_out=./
    

    이것 은 명령 을 통 해 대응 하 는 언어의 모델 을 생 성 할 수 있 는 가장 기본 적 인 메시지 체 이다
    IOS 는 생 성 된 model 시퀀스 를 바 이 너 리 로 만 들 기 위해 라 이브 러 리 를 설치 해 야 합 니 다.
    cocoapod 사용 하기
    pod 'Protobuf', '~> 3.1.0'
    ```
    ######4.2              
    
    ```
    message People{
     repeated string name = 1;
    }
    ```
            name      `  `,        `string`,      `repeated`     `required` `optional`   。
                     `[packed=true]`
    ```
    message People{
     repeated int32 repeated_number = 4 [packed=true];
    }
    ```
    
    ######4.3     (Reserved Fields)
    
        ,             ,     tag     ,      。
    ```
    message Foo {
      reserved 2, 15, 9 to 11;
      reserved "foo", "bar";
    }
    ```
    
    ######4.4      
    
    ```
    optional int32 result_per_page = 3 [default = 10];
    ```
    
    ###### ~~4.5     (Enumerations)~~
    
    ```
    message SearchRequest {
      required string query = 1;
      optional int32 page_number = 2;
      optional int32 result_per_page = 3 [default = 10];
      enum Corpus {
        UNIVERSAL = 0;
        WEB = 1;
        IMAGES = 2;
        LOCAL = 3;
        NEWS = 4;
        PRODUCTS = 5;
        VIDEO = 6;
      }
      optional Corpus corpus = 4 [default = UNIVERSAL];
    }
    ```
    
        **` enum `**      
    
    ######4.6     message  
    
    ```
    message SearchResponse {
      repeated Result result = 1;
    }
    
    message Result {
      required string url = 1;
      optional string title = 2;
      repeated string snippets = 3;
    }
    ```
    
    ######4.7   
    
                              
    
    ```
    import "myproject/other_protos.proto";
    ```
    
           `proto3`  ,  `proto2`         `proto3`     。
    
    ######4.8 message    
    
        4.6
    ```
    message SearchResponse {
      message Result {
        required string url = 1;
        optional string title = 2;
        repeated string snippets = 3;
      }
      repeated Result result = 1;
    }
    ```
                     message      `Parent.Type`
      :
    ```
    message SomeOtherMessage {
      optional SearchResponse.Result result = 1;
    }
    ```
    
            
    
    ```
    message Outer {                  // Level 0
      message MiddleAA {  // Level 1
        message Inner {   // Level 2
          required int64 ival = 1;
          optional bool  booly = 2;
        }
      }
      message MiddleBB {  // Level 1
        message Inner {   // Level 2
          required int32 ival = 1;
          optional bool  booly = 2;
        }
      }
    }
    ```
    ***
    #####            #####
    ***
    
    ######~~4.8   (Extensions)~~
    
    Extensions                     。
    ```
    message Foo {
      // ...
      extensions 100 to 199;
    }
    ```
             Foo message      Extensions       tag 100 199   Extensions  tag           ,     Extensions    
    ```
    extend Foo {
      optional int32 bar = 126;
    }
    ```
        Foo       optional int32   bar。
           Extensions            。(***  C++   ***)
    ```
    Foo foo;
    foo.SetExtension(bar, 15);
    ```
        class          Extensions
    ```
    HasExtension(),
    ClearExtension(),
    GetExtension(),
    MutableExtension(),
    AddExtension(),
    ```
    
    ######4.8   one of
    
         
    
    ```
    message SampleMessage {  
      oneof test_oneof {    
             string name = 4;    
             SubMessage sub_message = 9;  
    }}
    ```
    
       one of       ,     `required `,`optional`,`repeated`      
    
         one of    
    
    ```
    SampleMessage message;
    message.set_name("name");
    CHECK(message.has_name());
    message.mutable_sub_message();   // Will clear name field.CHECK(!message.has_name());
    ```
    
       `SampleMessage`      message,   `name`  ,  name       `‘name’`,      `sub_message `  ,  name        ,         **`one of`**     .
    
    #5. Map
    
        map    
    ```
    map map_field = N;
    ```
              
    - Extensions    map
    - map      `repeated`,`optional`,`required `
    
      map   `repeated`    ,       !
    
    ```
    message MapFieldEntry {  
      key_type key = 1;  
      value_type value = 2;
    }
    repeated MapFieldEntry map_field = N;
    ```
    
    
    
        。。。

    좋은 웹페이지 즐겨찾기