3

バイトからロードされたprotobufのタイプを取得する方法を教えてください。

元:

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

基本的に、msgタイプを取得する方法を見つける必要があり、ワークリストを出力する必要があります。

ありがとう。

4

1 に答える 1

3

Protobufメッセージは、本質的に自己記述的ではありません。バイトを解析する前に、メッセージタイプを知る必要があります。あなたの場合、バイト配列msgの解析に関するコードは、それらのバイトがワークリストを表していることを認識してから、ワークリストクラスで解析実装を呼び出す必要があります。

ただし、テクニックで説明されているように、ペイロードの一部としてメタデータを提供するクラスを設計できます。

[アップデート]

別のアプローチ-特にprotobufを使用して送受信用のメッセージを作成する場合は、最上位のメッセージクラスを定義することです。送受信されるすべてのメッセージはこのタイプです。次に、このメッセージに含まれる可能性のあるさまざまなタイプのコンテンツ(WorkItemなど)に対して、protobuf拡張機能を使用します。拡張機能に関するドキュメントは、自己記述型メッセージよりも少し優れていると思います。

双方が利用可能な拡張機能を知る必要がありますが、メッセージを解析したら、メッセージオブジェクトに動的にクエリを実行して、どの拡張機能(WorkItemなど)が入力されているかを確認できます。

于 2012-10-18T18:09:27.713 に答える