[Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일
[Google Protobuf] For Java in Android Studio
설치 및 proto 파일 컴파일
※ 관련글
- Google Protobuf
- [Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일
- [Google Protobuf] For Java in Android Studio - Gen Java 파일 Android Studio 적용
- [Google Protobuf] For Java in Android Studio - Basic example code 기본 소스 코드 사용 샘플
- [Google Protobuf] For C++ in Linux - Settings C++ 빌드 환경 만들기
- [Google Protobuf] For C++ in Linux - Basic example code 기본 소스 코드 사용 샘플
- Nanopb Basic type value example
- [Nanopb for Google protobuf] Basic type proto sample
- [Nanopb for Google protobuf] Basic type proto sample - Sample proto file
- [Nanopb for Google protobuf] Basic type proto sample - Encode sample code
- [Nanopb for Google protobuf] Basic type proto sample - Decode sample code
- Nanopb String / bytes value example
- [Nanopb for Google protobuf] String/Bytes type proto
- [Nanopb for Google protobuf] String/Bytes type proto - Sample proto file
- [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 1
- [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 2
- [Nanopb for Google protobuf] String/Bytes type proto - Decode example code
- Nanopb basic submsg example
- [Nanopb for Google protobuf] Sub message - Example proto file
- [Nanopb for Google protobuf] Sub message - Encode example code
- [Nanopb for Google protobuf] Sub message - Decode example code
- Nanopb array submsg value example
- [Nanopb for Google protobuf] Array Sub message - Example proto file
- [Nanopb for Google protobuf] Array Sub message - Encode example code
- [Nanopb for Google protobuf] Array Sub message - Decode example code
* Java 구글 프로토 버퍼 소스 코드 다운로드
https://github.com/protocolbuffers/protobuf/releases
* Tutorials
https://developers.google.com/protocol-buffers/docs/tutorials
* .proto 파일 작업
가이드 문서에 있는 "addressbook.proto" 의 내용으로 샘플을 만든다.
[.proto 파일 문법은 Java/C++ 유사하지만 아래 참조 문서를 이용하여 만들어야 된다.
https://developers.google.com/protocol-buffers/docs/proto]
# syntax 정의
proto2 / proto3 등을 넣을 수 있다.
[눈치밥으로 프로토콜 버전 정의라고 생각하면 될듯..넘어가자]
# package 선언을 해야 함.
proto 파일들의 충돌을 막는데 사용된다.
# Gen되는 Class 의 이름과 패키지 정보를 선언한다.
- 선언하지 않는 경우 class 명은 proto 파일 이름이 camel case 로 자동 생성되며,
- 패키지는 위쪽에 선언한 package 명과 유사한 것이 자동 붙게 된다.
# Message 정의
- 메시지는 데이터 필드들이 있는 형태 이다.
- 타입은 boo, int32, float, double, string 등이 사용된다.
- Message 내부 class 와 같은 형태의 데이터를 넣을 수 있다.
- proto 파일 내부에 message 를 여러개 넣을 수 있다.
- enum 타입도 정의 가능 [ex) PhoneType]
- 각 element 들은 " = 1", " = 2" 으로 Tag 숫자 정의하여야 하며 이것은 나중에 키 값이 된다.
Tag 숫자는 1 ~ 15 지정이 가능하다.
각 필드들은 annotated 스트링이 붙게 된다.
required : 반듯이 초기 값이 설정되어야 한다. 그렇지 않은 경우 빌드시 RuntimeException 발생하고
사용 시 IOException 발생.
optional : 초기값을 넣을수도 있고 넣지 않을 수도 있다. 넣지 않는 경우 초기값이 자동 설정된다.
repeated : ArrayList 형태의 데이터 타입을 정의하는 데 사용한다.
- 상속은 지원하지 않는다.
# 생성된 proto 파일을 complie 시켜 class 파일을 얻는다.
* -I : protoc.exe 파일이 있는 경로, 같은 위치면 옵션 없어도 된다.
* --java_out : Java Class 파일 Gen을 위한 옵션
* $DST_DIR : Java(Class) 파일이 생성되는 경로
* $SRC_DIR : 빌드하려는 *.proto 파일이 있는 경로
* 참조 사이트
* Java Api Ref : https://developers.google.com/protocol-buffers/docs/reference/java/index.html
* Proto file Language Guide : https://developers.google.com/protocol-buffers/docs/proto
* Java Generated Code : https://developers.google.com/protocol-buffers/docs/reference/java-generated
* proto file message 내에 사용가능 타입
.proto Type | Notes | Go Type |
double | *float64 | |
float | *float32 | |
int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | *int32 |
int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | *int64 |
uint32 | Uses variable-length encoding. | *uint32 |
uint64 | Uses variable-length encoding. | *uint64 |
sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | *int32 |
sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | *int64 |
fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 228. | *uint32 |
fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 256. | *uint64 |
sfixed32 | Always four bytes. | *int32 |
sfixed64 | Always eight bytes. | *int64 |
bool | *bool | |
string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | *string |
bytes | May contain any arbitrary sequence of bytes. | []byte |
'IT > C, C++' 카테고리의 다른 글
[Google Protobuf] For Java in Android Studio - Basic example code 기본 소스 코드 사용 샘플 (0) | 2020.01.30 |
---|---|
[Google Protobuf] For Java in Android Studio - Gen Java 파일 Android Studio 적용 (0) | 2020.01.30 |
[c, c++] hex array to string (0) | 2018.12.05 |
스트링 마지막에 일치 스트링 찾기(find string) (0) | 2018.12.05 |
std::map 복사(std::copy) (0) | 2018.12.05 |