私たちは似た何かをしたが、次のような一般的なメッセージを作っ:
message GenericMessage {
required int32 id = 1;
// further generic message headers
message IntegerVariable {
required string name = 1;
optional int32 data = 2;
}
repeated IntegerVariable integerVars = 2;
message IntegerArrayVariable {
required string name = 1;
repeated int32 data = 2;
optional int32 length = 3;
}
repeated IntegerArrayVariable integerArrayVars = 3;
message DoubleVariable {
required string name = 1;
optional double data = 2;
}
repeated DoubleVariable doubleVars = 4;
...
message RawVariable {
required string name = 1;
optional bytes data = 2;
}
repeated RawVariable rawVars = x;
}
これは、あなたは多くの可能な例のために一つのバッファを使用することができますし、まだ(なしあなたに高速なシリアライズ/デシリアライゼーションのの利点を提供します反射が必要)。バッファには、必須または任意のマークを付けることができるヘッダ変数と、複数の繰返しペイロード変数を含めることができます。これは非常に一般的であるにもかかわらず、メッセージがまだ非常に小さくなることを可能にします。
これらのメッセージを処理するために追加のレイヤーを作成する場合は、メッセージをHashMap<String, Object>
に処理し、ヘッダー情報と共にアプリケーションに返すことをお勧めします。アプリケーション間で、名前とタイプを正しく取得する必要があります。
ありがとうございます! "CLASS x = CLASS.newBuilder()。mergeFrom(BYTES).build()"答えを受け入れる前に、誰かが拡張機能でどうやってそれを行うか教えてもらえるかどうか少し調べるつもりです... –