2017-04-23 14 views
23

Decyduję się, czy używać Moshi by square lub Gson do serializacji i deserializacji danych modelu.Moshi vs Gson w Androidzie

Jedną rzeczą, której zawsze nie lubiłem w Gsonie, jest to, że używa refleksji, która może być powolna na Androidzie? Czy Moshi też używa odbicia?

Jakie są zalety i wady Moshi vs Gson?

Widzę je jako podobne. Weźmy na przykład to stwierdzenie, że tworzy typeAdapter:

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); 
    } 
    } 
} 

i używać go zarejestrować go podobnie jak w gson:

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

Chyba zalety byłaby adnotacja wykorzystywane w typeAdapter. Zamierzam dowiedzieć się, czy są jakieś zyski wydajności, jeśli przejdę na Moshi.

Odpowiedz

35

Moshi używa Okio do optymalizacji kilku rzeczy, których nie ma Gson.

  • Po ustawieniu reading field names, Moshi nie musi przypisywać ciągów znaków ani wyszukiwań hash.
  • Moshi skanuje dane wejściowe jako sekwencję bajtów UTF-8, leniwie konwertując na znaki Java. Na przykład nigdy nie musi konwertować literałów całkowitych na znaki.

Korzyści z tych optymalizacji są szczególnie widoczne, jeśli korzystasz już ze strumieni Okio. Szczególnie użytkownicy korzystający z usługi Moshi mogą korzystać z usług użytkowników o numerach Retrofit i OkHttp.

Dalsza dyskusja na temat początków Moshi znajduje się w moim poście, Moshi, another JSON Processor.

+0

Czy używa refleksji – j2emanue

+2

@ j2emanue Jako szczegół wdrożenia, domyślne JsonAdapters dla twoich niestandardowych klas ustawi pola z refleksami. –