2012-10-18 3 views
3

바이트에서로드 된 protobuf의 유형을 검색하는 방법을 알고 싶습니다.Google ProtocolBuffer 비 직렬화 유형

예는 :

Worklist work = Worklist.newBuilder().build(); 
byte[] msg = work.toByteArray(); 

는 기본적으로 나는 MSG 유형을 검색 할 수있는 방법을 찾을 필요가 및 작업리스트를 인쇄해야합니다.

감사합니다.

답변

3

Protobuf 메시지는 본질적으로 자체 설명하지 않습니다. 메시지 유형 을 알고 나서 바이트를 구문 분석해야합니다. 바이트 배열 msg를 구문 분석하는 코드는 해당 바이트가 Worklist를 나타내는 지 확인한 다음 Worklist 클래스에서 구문 분석 구현을 호출합니다.

그러나 Techniques에서 설명한 것처럼 메타 데이터를 페이로드의 일부로 제공하는 클래스를 디자인 할 수 있습니다.

[업데이트]

또 다른 방법은 - 당신이 보내는 메시지를 작성하는 protobuf을 사용하는 경우 특히/수신 상위 레벨의 메시지 클래스를 정의하는 것입니다. 보내고받은 모든 메시지는이 유형입니다. 그런 다음이 메시지 (예 : WorkItem)에 포함될 수있는 다양한 유형의 컨텐츠에 대해 protobuf 확장을 사용하십시오. 나는 extensions에 관한 문서가 자기 설명하는 메시지보다 조금 나아 졌다고 생각한다.

양측은 가능한 확장을 알아야하지만, 메시지를 분석 일단 당신이 기입 된 (WorkItem에서와 같은) 어떤 확장 볼 동적으로 메시지 객체를 조회 할 수 있습니다.

+0

자체 기술 기술은 보인다 갈 방법은 모르겠지만 그것을 사용하는 방법을 몰랐다. 이 특정 기능에서는 설명서가 매우 형편 없습니다. – user1757189

+0

동의 - 다른 접근법에 대한 업데이트를 참조하십시오. –

+0

좋은 아이디어, 잘 작동 :) – user1757189