직렬화 데이터 구조
mac os
brew install protobuf
확인 protoc --version
syntax = "proto2";
package hiware.auth;
option java_package = "com.netand.hiware.auth.protocol";
//데이터 타입들의 최상위 클래스로 message 단위는 클래스의 하위 클래스로 들어갈 것이다.
option java_outer_classname = "HWAP";
message Message {
//필요로 되는 필드(없으면 Exception을 일으키는)를 정의하고 싶을 때, 꼭 required 키워드를 사용
required MessageType type = 1;
required bytes body = 2;
required string version = 3;
}
📌클래스 생성 후
메세지 타입에 있는 HWAP.Message message = HWAP.Message.newBuilder().set.....
모든 required 필드를 작성한 이후에 build() 메소드를 호출하면 Message 클래스를 만들 수 있다
: proto2 문법에서는 message 내부에 enum을 정의하여 열거형 값을 지정할 수 있다.
syntax = "proto2";
message MyMessage {
enum Color {
RED = 0;
GREEN = 1;
BLUE = 2;
}
required Color color = 1;
}
MyMessage 라는 메시지 내부에 Color라는 열거형을 정의
각 열거형 값을 RED, GREEN, BLUE로 정의되어 있고 각각 0,1,2의 숫자로 매핑되어있다.
이후 color 필드가 MyMessage에 추가되었는데 이 필드는 Color 열거형의 값 중 하나를 가질 수 있다.
이진 데이터가 올바른 프로토콜 버퍼 형식인지 확인하고 역직렬화하는 데 사용됩니다. 데이터가 유효한 경우 역직렬화가 수행되며, 그렇지 않은 경우 InvalidProtocolBufferException 예외가 발생
import com.google.protobuf.InvalidProtocolBufferException;
import com.example.proto.MyProto;
public class ProtoExample {
public static void main(String[] args) {
// 예제 데이터를 바이트 배열로 가정
byte[] serializedData = ...; // 직렬화된 데이터
try {
MyProto.Person person = MyProto.Person.parseFrom(serializedData);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
참고