.protoにマッチするデータ構造を格納する方法

私は、protobufを使用してサーバーからデータを取得し、ユーザーがデータツリーをブラウズできるようにする(単純化された)非常にシンプルなアンドロイドアプリを持っています。

今私は私の内部のデータセットとして、私はprotobufの返信(自動生成されたクラスを使用していたので、私の構造内のこのデータが欲しい)。

問題は、その中のいくつかのデータを更新し、さらにサーバーからデータを取得してツリーにアタッチできるようにすることです。これはデータが不変であるため不可能です。

私の質問は、できるだけ小さなコンピューティングパワーで、私のprotobufメッセージを変更可能なデータ構造として保存する方法です。

私は自分自身の対応するdataclass構​​造(二重仕事のように思える)を作らなければならないのですか、それとも他の方法がありますか?

1

2 答え

私が使用したアプローチは、protobuf型を反映する独自の型をインプリメントすることですが、インプレース変更などの余分な機能を可能にし、各タイプの対の間で変換する一連の変換関数を実装します。私は実際にワイヤで何かを送受信する必要があるときにのみProtobuf生成クラスを使用します。

2
追加された
それはちょっと残念ですが、ダブルコーディング作業だけでなく、CPUの電力変換オブジェクトを追加することもあります。
追加された 著者 Rickard Liljeberg,
アンドロイドでは、オブジェクトをインスタンス化するとパフォーマンスが低下します。これが最良のアプローチです。
追加された 著者 Guillermo Tobar,

あなたのprotobufメッセージは変更可能なデータ構造です。 Builder インターフェースを使ってそれらを変更し、AndroidローカルファイルストレージまたはSQLite BLOBを使用してそれらを保存することができます。

次の例を参照してください。

0
追加された
あなたの最初のリンクのドキュメントによると、 "プロトコルバッファコンパイラによって生成されたメッセージクラスはすべて不変です"。 Builderを使用して既存のメッセージオブジェクトを変更する方法の例を(単純に新しいメッセージオブジェクトを作成することなく)提供できますか?
追加された 著者 jon-hanson,
私はそれが問題だと言っているわけではありません。私は、あなたが元のオブジェクトを修正していないことは、それが私をサポートしていないので明確であることが役に立つと思うだけです。
追加された 著者 jon-hanson,
はい、私は実際の構造を変更する必要があります私は変更することができますオブジェクトを取得するだけではありません。
追加された 著者 Rickard Liljeberg,
したがって、私はメッセージを入れ子にしています。ビルダーで内側のオブジェクトを変更すると、外側のオブジェクトはリストに挿入されません
追加された 著者 Rickard Liljeberg,
myObject = myObject.toBuilder()。setFoo( "bar")。build(); ...「単に新しいものを作成する」というのがなぜこのような問題なのか分かりません。
追加された 著者 Jeff Gilfelt,