Moshi vs Gson di android

I'm memutuskan apakah akan menggunakan Moshi oleh square atau Gson untuk serialize dan deserialize model data.

satu hal yang saya selalu tidak suka tentang Gson saya pikir itu menggunakan refleksi yang dapat lambat di android? Tidak Moshi menggunakan refleksi juga?

Apa adalah beberapa pro dan kontra dari moshi vs Gson?

Saya melihat mereka sebagai mirip. ambil contoh pernyataan ini yang menciptakan 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);
    }
  }
}

dan untuk menggunakannya mendaftar seperti di gson:

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

Saya kira keuntungan akan menjadi penjelasan yang digunakan dalam typeAdapter. I'm mencari tahu apakah ada keuntungan kinerja jika saya beralih ke Moshi.

Larutan

Moshi menggunakan Okio untuk mengoptimalkan beberapa hal yang Gson tidak.

  • Ketika membaca bidang names, Moshi tidak harus mengalokasikan string atau melakukan hash pencarian.
  • Moshi memindai input sebagai urutan UTF-8 byte, mengkonversi ke Jawa karakter malas. Misalnya, tidak perlu untuk mengkonversi integer literal untuk karakter.

Manfaat dari optimasi ini sangat terasa jika anda sudah menggunakan Okio sungai. Pengguna Retrofit dan OkHttp secara khusus manfaat dari Moshi.

Pembahasan lebih lanjut tentang asal-usul dari Moshi yang di posting saya, Moshi, lain JSON Prosesor.

Komentar (3)

Menurut swankjesse's komentar di reddit:

Saya bangga dengan pekerjaan saya di Gson, tetapi juga kecewa dengan beberapa keterbatasan. Aku ingin ke alamat ini, tetapi bukan sebagai "Gson 3.0", sebagian karena saya tidak lagi bekerja di Google. Jake Scott, Eric, dan saya dibuat Moshi untuk mengatasi berbagai keterbatasan Gson. Berikut adalah sepuluh alasan kecil untuk memilih Moshi atas Gson:

  1. Mendatang Kotlin dukungan.

  2. Kualifikasi seperti @HexColor int mengizinkan beberapa JSON representasi tunggal Jawa jenis.

  3. Yang @ToJson dan @FromJson membuatnya mudah untuk menulis dan menguji custom JSON adapter.

  4. JsonAdapter.failOnUnknown() memungkinkan anda menolak tak terduga data JSON.

  5. Diprediksi pengecualian. Moshi throws IOException di IO masalah dan JsonDataException pada jenis ketidaksesuaian. Gson adalah seluruh tempat.

  6. JsonReader.selectName() tidak perlu menghindari UTF-8 decoding dan string alokasi dalam kasus umum.

  7. Anda akan kapal yang lebih kecil APK. Gson adalah 227 KiB, Moshi+Okio bersama-sama 200 KiB.

  8. Moshi tidak akan bocor rincian pelaksanaan dari platform jenis ke dikodekan JSON. Hal ini membuat saya takut Gson: gson.toJson(SimpleTimeZone.getTimeZone("GMT"))

  9. Moshi tidak berbuat yang aneh-aneh HTML melarikan diri secara default. Melihat Gson default encoding "12 & 5 = 4" untuk contoh.

  10. Tidak rusak Tanggal adapter terinstal secara default.

Jika anda sedang menulis kode baru, saya sangat merekomendasikan dimulai dengan Moshi. Jika anda punya proyek yang sudah ada dengan Gson, anda harus meng-upgrade jika itu akan menjadi sederhana dan tidak berisiko. Jika tidak menempel dengan Gson! Saya melakukan yang terbaik untuk memastikan hal itu tetap kompatibel dan dapat diandalkan.

Komentar (2)