3

昨日からGoogleプロトコルバッファを学んでいて、質問があります:

ユーザー定義の Java クラスを .proto ファイルのフィールド タイプとして使用できますか?

以下の詳細で質問を明確にしましょう。

1 - 次の Java クラス "MyComplexClass.java" があります。

package mypackage;

import another.package1.ClassA;
import another.package2.ClassB;

public class MyComplexClass {

private ClassA var1;
private ClassB var2;

public MyComplexClass(ClassA X, ClassB Y)
 this.var1 = X;
 this.var2 = Y;
}

2- クラス「MyComplexClass.java」のインスタンスをシリアライズしたいと思います。そのために、以下のようなメッセージを .proto ファイルに記述したいと思います。

message myMessageToBeSerialized {

 required ***MyComplexClass*** intanceOfComplexClass = 1;

}

ユーザー定義クラスMyComplexClassをフィールド タイプとして使用することはできますか? それともスカラー型しか使えないのでしょうか?

どんな助けでも大歓迎です。前もって感謝します。

ホレス

4

3 に答える 3

3

いいえ。プロトコル バッファとして定義された型のみを使用できます。(とは言っても、機能を追加する必要がある場合は、独自の複雑なクラスをプロトコル バッファー クラスのラッパーとして実装するのが一般的です。)

ただし、本当に熱心な場合は、通常の Java シリアライゼーション ( a でObjectOutputStreamラップされた a ByteArrayOutputStream) を使用してから、プロトコル バッファーを介して byte[] を送信できます。

于 2012-04-19T14:20:57.223 に答える
1

はい、できます。ClassA と ClassB の両方をメッセージとして定義すると、それらを MyComplexClass のフィールド タイプとして参照できます。下記参照。(3 つのパッケージすべてを個別の .proto ファイルで定義します)

package another.package1;
message ClassA 
{
  <fields>
}


package another.package2;
message ClassB
{
  <fields>  
}


package mypackage;

import another/package1/ClassA;
import another/package2/ClassB;

message MyComplexClass
{
     required ClassA var1 = 1;
     required ClassB var2 = 2;  
}
于 2012-07-19T14:02:14.850 に答える