2017-04-23 55 views
23

Model verilerini serileştirmek ve serileştirmek için Moshi by square veya Gson'un kullanılıp kullanılmayacağına karar veriyorum.Android için Moshi vs Ghi

Gson hakkında her zaman sevmediğim bir şey, Android'de yavaş olabilecek yansımayı kullanmak olduğunu düşünüyorum. Moshi de yansımayı kullanıyor mu?

Moshi vs Gson'un artıları ve eksileri nelerdir?

Onları benzer şekilde görüyorum.

class CardAdapter { 
    @ToJson String toJson(Card card) { 
    return card.rank + card.suit.name().substring(0, 1); 
    } 

    @FromJson Card fromJson(String card) { 
    if (card.length() != 2) throw new JsonDataException("Unknown card: " + card); 

    char rank = card.charAt(0); 
    switch (card.charAt(1)) { 
     case 'C': return new Card(rank, Suit.CLUBS); 
     case 'D': return new Card(rank, Suit.DIAMONDS); 
     case 'H': return new Card(rank, Suit.HEARTS); 
     case 'S': return new Card(rank, Suit.SPADES); 
     default: throw new JsonDataException("unknown suit: " + card); 
    } 
    } 
} 

ve sadece GSON gibi kaydetmek kullanmak: örneğin bir typeAdapter yaratan bu ifadesini almaya

Moshi moshi = new Moshi.Builder() 
.add(new CardAdapter()) 
.build(); 

i avantajları typeAdapter kullanılıyor ek açıklama olacağını tahmin ediyorum. Moshi'ye geçersem herhangi bir performans kazancı olup olmadığını öğrenmek istiyorum.

cevap

35

Moshi, Gson'un yapmadığı birkaç şeyi en iyi duruma getirmek için Okio'yu kullanır.

  • reading field names, Moshi dizeleri ayırmak veya karma arama yapmak zorunda kalmaz.
  • Moshi, girişi bir dizi UTF-8 bayt olarak tarar ve Java chars'larına tembel olarak dönüştürür. Örneğin, tamsayı değişmezlerini char'lara dönüştürmesi gerekmez.

Zaten Okio akışlarını kullanıyorsanız, bu en iyileştirmelerin yararları özellikle belirgindir. Özellikle Retrofit ve OkHttp kullanıcıları Moshi'den faydalanmaktadır.

Moshi'nin kökenleri ile ilgili daha fazla tartışma, yazımda Moshi, another JSON Processor.

+0

Yansıma – j2emanue

+2

@ j2emanue kullanıyor mu? Bir uygulama ayrıntısı olarak, özel sınıflarınız için varsayılan JsonAdapters, alanları yansıtma ile ayarlayacaktır. –