protobufメッセージは、変更不可能なリストを使用して、私はデータ構造としてそれを使用しようとしています

私はデータを取得するためにWebサーバーと通信しているアンドロイドアプリを書いています。私はprotobufとすべての作品を魅力のように使うことに決めました。

しかし、私の問題はこれです、私のデータセットは巨大で、すべてのデータを一度に取得することはできませんので、私はトップレベルを取得して、私が一緒に行く(電話でブラウズする)ように多くを求めます。

私はprotocを使ってJavaクラスを生成しましたが、これはうまく動作し、ちょうど私が望むように(データの最上位レベルのみを持つイニシャル)私の素敵な光沢のあるオブジェクト構造を取得します。 しかし、私は私の主なデータ構造として私のアプリケーションに持っている構造を使用する決定を下し、そのアプリケーションのすべてのリストは変更不可能なので、後でデータを増やすことができず、

現時点では、protoが生成した自動生成されたJavaファイルを単純に編集して、変更不可能ではなく通常のリストを返すようにしましたが、後でそのファイルを再生成する必要がある場合はかなり愚かです。

何をすべきか? protobufオブジェクトをストレージとして使用しないでください。 (自分のストレージクラスを書くのはもちろんのこと、すべてのデータをカスタムオブジェクトにコピーするのは無駄になります。)

2

1 答え

生成されたプロトコルバッファクラスは変更しないでください。

生成されるメッセージクラスは、設計によって不変です。オブジェクトを変更するには、対応する Builder クラスを使用して既存のメッセージから新しいメッセージを生成し、setterメソッドを使用してそれを操作し、 build()を呼び出して変更されたオブジェクト。例えば:

person.toBuilder()
    .setName("Jeff")
    .addPhone(phoneNumber)
    .build();

protobufチュートリアルの「ビルダーとメッセージ」を参照してください。

http://code.google.com/apis/protocolbuffers/docs/javatutorial .html#ビルダー

1
追加された
ありがとうございました。入ってくるデータをビルダーに変換し、それを自分のアプリケーションのデータ構造として保存するのは良いプラクシスでしょうか。またはスタンドアロンのデータ構造を持つことをお勧めしますか?
追加された 著者 Rickard Liljeberg,
しかし、ビルダーは新しいオブジェクトを返します。私は自分の.protoにネストされたメッセージを持っているので、親オブジェクトのリストに新しく生成されたオブジェクトを挿入することはできません。
追加された 著者 Rickard Liljeberg,
ビルダーは、コードの1行で特定のオブジェクトに対してアクセスまたは作成することができるため、なぜそれを格納したいのかわかりません。 Googleによると、生成されたプロトコルバッファクラスを独自のアプリケーション固有のクラスにラップすることがベストプラクティスです(リンクチュートリアルの「プロトコルバッファとO-O設計」を参照)。
追加された 著者 Jeff Gilfelt,