veri yapısı eşleştirme .proto nasıl saklanır

Oldukça basit bir android uygulaması var, protobuf kullanarak sunucudan veri getiriyor ve daha sonra kullanıcının veri ağacını taramasına izin veriyor (basitleştirilmiş)

Şimdi sadece bu veriyi yapılarımda görmek istiyorum, böylece iç veri setim olarak protobuf cevabını (otomatikleştirilmiş sınıf aracılığıyla) kullanıyordum.

Sorun şu ki, içindeki bazı verileri güncelleyebilmek ve sunucudan daha fazla veri alabiliyor ve ağaca bağlayabileceğim ... Bu, verilerin immutable olması nedeniyle imkansız.

Bu yüzden benim sorum şu ki, mümkün olduğunca az bilgi işlem gücü ile protobuf mesajlarımı değişken bir veri yapısı olarak nasıl kaydederim?

kendi veri kütlesi yapısını (çift çalışma gibi görünüyor) yapmak zorunda mıyım yoksa başka bir yol var mı?

1

2 cevap

Kullandığım yaklaşım, protobuf tiplerini yansıtan ama yerinde değişiklik gibi ekstra işlevsellik sağlayan ve aynı zamanda her tip çift arasında dönüşüm yapmak için bir dizi çeviri fonksiyonu uygulayan kendi türlerimi uygulamak. Ben sadece tel üzerinden bir şey göndermek ya da almak gerektiğinde sadece Protobuf üretilen sınıfları kullanıyorum.

2
katma
Sadece utanç verici, sadece çift kodlama çalışması değil, aynı zamanda ekstra cpu güç dönüştürücü nesneler.
katma yazar Rickard Liljeberg, kaynak
Android'de, nesneleri başlatmak performansla cezalandırılır. Bu en iyi yaklaşımdır.
katma yazar Guillermo Tobar, kaynak

Protobuf mesajlarınız değiştirilebilir veri yapılarıdır. Onları Builder arayüzü ile değiştirirsiniz ve bunları Android yerel dosya deposu veya SQLite BLOB kullanarak saklayabilirsiniz.

Şu örneklere bakın:

0
katma
İlk bağlantınızdaki belgelere göre "Protokol arabellek derleyicisi tarafından oluşturulan ileti sınıfları tümüyle değiştirilemez". Mevcut bir mesaj nesnesini (sadece yeni bir tane oluşturmaksızın) değiştirmek için bir Builder'ı nasıl kullandığınızın bir örneğini sağlayabilirsiniz.
katma yazar jon-hanson, kaynak
Bunun bir sorun olduğunu söylemiyorum. Ben sadece iyiyi desteklemediğinden orijinal nesneyi değiştirmediğinizi açıklığa kavuşturmanın yararlı olduğunu düşünüyorum.
katma yazar jon-hanson, kaynak
Evet, gerçek yapıda değiştirmem gereken bir nesneyi değiştirmem gerekiyor.
katma yazar Rickard Liljeberg, kaynak
Bu yüzden, iç içe geçmiş mesajlarım var. Ve eğer iç nesneyi oluşturucu ile değiştirirsem, dış nesne onu listeye yeniden yerleştirmeme izin vermez
katma yazar Rickard Liljeberg, kaynak
myObject = myObject.toBuilder() setFoo ("bar") build (); ... Sanırım neden "sadece yeni bir tane yaratma" gibi bir sorun değil.
katma yazar Jeff Gilfelt, kaynak