Google Protobuf 프로필 및 사용
Protocol Buffers 는 데이터 구 조 를 직렬 화 하 는 방법 이다.도선 이나 저장 데 이 터 를 통 해 통신 하 는 프로그램 개발 에 유용 하 다.이 방법 은 인터페이스 설명 언어 를 포함 하고 데이터 구 조 를 설명 하 며 프로그램 도 구 를 제공 하여 이 설명 에 따라 코드 를 만들어 데이터 구 조 를 만 들 거나 데이터 흐름 을 분석 하 는 데 사용 합 니 다.
우선, protobuf 는 * * 오픈 소스 프로젝트 (공식 사이트 가 '여기') 이 고 배경 이 단단 한 오픈 소스 프로젝트 입 니 다.인터넷 에 현존 하 는 대부분 (적어도 80%) 의 개원 프로젝트 는 누군가가 단독으로 하거나 몇 명의 잡역부 등 이 공동으로 한다.protobuf 는 그렇지 않 습 니 다. 유명한 구 글 회사 가 개발 하고 구 글 내부 에서 오 랜 시련 을 겪 은 곳 입 니 다.이 를 통 해 알 수 있 듯 이, 그것 의 작 가 는 결코 일반 잡역부 등 과 비교 할 수 있 는 것 이 아니다.그럼 이 소 X 로 들 리 는 동 동 은 도대체 무슨 소 용이 있 습 니까?쉽게 말 하면 이 동쪽 에서 하 는 일 은 XML * * 와 차이 가 많 지 않다. 즉, 특정한 데이터 구조의 정 보 를 특정한 형식 으로 저장 하 는 것 이다.주로 데이터 저장, 전송 프로 토 콜 형식 등에 사용 된다.어떤 학생 은 심리 적 으로 중 얼 거 렸 을 것 이다. 멀쩡 한 XML 을 두 고 쓰 지 않 고 왜 바퀴 를 다시 발명 하 느 냐?!우선 서 두 르 지 마라, 뒤에 내 가 당연히 말 할 것 이다.그런데 작년 (약 08 년 7 월) 에 구 글 은 갑자기 자 비 를 베 풀 어 이 좋 은 물건 을 개원 커 뮤 니 티 에 기여 했다.이제 나 처럼 이미 만들어 진 것 을 주 우 는 것 을 좋아 하 는 녀석 은 정말 복 이 있 을 거 야!이미 만들어 진 것 을 주 우 는 것 을 좋아 하 는 녀석 들 이 꽤 많은 것 같 고, 게다가 구 글 의 호소력 까지 겹 쳐 개원 한 지 1 년도 안 돼 프로 토 버 프 의 인기 가 뜨겁다.그래서 나 는 시대와 함께 나 아가 기 위해 단독으로 댓 글 을 달 아 어슬 렁 거 렸 다.인용
ProBuffer 는 두 가지 버 전 으로 나 뉘 어 져 있 습 니 다.
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 을 생 성 할 수 있 습 니 다.
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;
```
。。。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.