2017-04-23 69 views
23

我決定是否使用Moshi by square或Gson序列化和反序列化模型數據。Moshi vs Gson in android

我總是不喜歡關於Gson的一件事是我認爲它使用可以在Android上慢的反射? Moshi也使用反射嗎?

moshi vs Gson有什麼優點和缺點?

我把它們看成相似的。就拿這個語句創建一個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); 
    } 
    } 
} 

,並用它註冊它就像GSON:

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

我猜的優勢將在typeAdapter正在使用的註釋。我正在尋找如果我切換到Moshi是否有任何性能增益。

回答

35

Moshi使用Okio來優化Gson沒有的一些事情。

  • reading field names,Moshi不必分配字符串或做哈希查找。
  • Moshi將輸入掃描爲一系列UTF-8字節,並懶惰地轉換爲Java字符。例如,它從不需要將整數文字轉換爲字符。

如果您已經使用Okio流,這些優化的好處尤其明顯。用戶RetrofitOkHttp特別受益於Moshi。

關於Moshi起源的進一步討論在我的文章Moshi, another JSON Processor

+0

是否使用反射 – j2emanue

+2

@ j2emanue作爲實現細節,您的自定義類的默認JsonAdapters將使用反射設置字段。 –