1. ホーム
  2. android

[解決済み] Moshi vs Gson in android [クローズド]。

2023-04-21 15:28:33

質問

を使うかどうか決めているところです。 四角でモシモシ を使うか、Gsonを使ってモデルデータをシリアライズ/デシリアライズするかを決めています。

Gsonについて私がいつも好きではないことの一つは、それがアンドロイド上で遅いことができる反射を使用していると思うのですが?Moshiもリフレクションを使っているのでしょうか?

moshiと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に切り替えた場合、パフォーマンスが向上するかどうかを調べたいのです。

どのように解決するのですか?

MoshiはOkioを使って、Gsonにはないいくつかの最適化を行っています。

  • いつ フィールド名を読む の場合、Moshi は文字列の割り当てやハッシュの検索をする必要がありません。
  • Moshiは入力をUTF-8バイトのシーケンスとしてスキャンし、Javaの文字に遅延的に変換しています。例えば、整数のリテラルを文字に変換する必要はありません。

これらの最適化の利点は、すでに Okio ストリームを使用している場合に特に顕著になります。ユーザーは レトロフィット OkHttp は特にMoshiの恩恵を受けています。

Moshi の起源に関するさらなる議論は、私の投稿にあります。 Moshi、もうひとつの JSON プロセッサ .