2017-04-23 15 views
23

मैं यह तय करता हूं कि Moshi by square या जीसन मॉडल मॉडल को क्रमबद्ध और deserialize करने के लिए उपयोग करना है या नहीं।एंड्रॉइड में मोशी बनाम जीसन

एक चीज जो मुझे हमेशा जीसन के बारे में पसंद नहीं है, मुझे लगता है कि यह प्रतिबिंब का उपयोग करता है जो एंड्रॉइड पर धीमा हो सकता है? क्या मोशी प्रतिबिंब का भी उपयोग करता है?

मोशी बनाम जीसन के कुछ पेशेवर और विपक्ष क्या हैं?

मैं उन्हें समान दिखता हूं। उदाहरण के लिए ले इस बयान कि एक 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 में इस्तेमाल किया जा रहा होगा। मैं यह देखने के लिए देख रहा हूं कि अगर मैं मोशी में जाता हूं तो कोई प्रदर्शन लाभ होता है या नहीं।

उत्तर

35

मोशी कुछ चीजों को अनुकूलित करने के लिए ओकिओ का उपयोग करता है जो जीसन नहीं करता है।

  • reading field names, मोशी को स्ट्रिंग आवंटित करने या हैश लुकअप करने की आवश्यकता नहीं है।
  • मोशी यूटीएफ -8 बाइट्स के अनुक्रम के रूप में इनपुट स्कैन करता है, जो जावा वर्णों को आलसी रूप से परिवर्तित करता है। उदाहरण के लिए, इसे पूर्णांक अक्षरों को वर्णों में परिवर्तित करने की आवश्यकता नहीं होती है।

इन अनुकूलन के लाभ विशेष रूप से स्पष्ट हैं यदि आप पहले ही ओकिओ स्ट्रीम का उपयोग कर रहे हैं। Moshi से विशेष लाभ में Retrofit और OkHttp के उपयोगकर्ता।

मोशी की उत्पत्ति पर आगे की चर्चा मेरी पोस्ट में है, Moshi, another JSON Processor

+0

क्या यह प्रतिबिंब – j2emanue

+2

@ j2emanue का उपयोग कार्यान्वयन विस्तार के रूप में करता है, आपके कस्टम कक्षाओं के लिए डिफ़ॉल्ट जेसन एडाप्टर प्रतिबिंब के साथ फ़ील्ड सेट करेंगे। –

संबंधित मुद्दे