Моши против Дсын в Android

Я'м принимая решение о том, следует ли использовать Моши по площади или Gson для сериализации и десериализации модели данных.

одна вещь, которую я всегда не любил о Gson, я думаю, он использует отражение, которое может быть медленным на Android? Моши ли использовать отражение также?

Какие плюсы и минусы Моши против Дсын?

Я вижу в них похожие. взять к примеру это заявление, что создает 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);
    }
  }
}

и использовать его зарегистрировать его так же, как в дсын:

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

Я думаю, плюсов было бы в аннотации используется в typeAdapter. Я'м глядя, чтобы выяснить, если есть какие-либо прирост производительности, если я переключусь в Моши.

Решение

Моши использует Окио для оптимизации несколько вещей, которые Дсын не.

  • Когда чтение names поле, Моши не нужно выделить строки или делать хэш-поиска.
  • Моши сканирует входной сигнал как последовательность байт UTF-8, преобразование в Java символы лениво. Например, он никогда не должен преобразовать целочисленные литералы в chars.

Преимущества этих оптимизаций, особенно если вы уже используете Окио потоков. Пользователи дооснащение и OkHttp, в частности, выигрывают от Моши.

Дальнейшее обсуждение вопроса о происхождении Моши в моем посте, Моши, другой процессор в JSON.

Комментарии (3)

По данным swankjesse'ы комментарий на Reddit:

Я горжусь своей работой на Дсын, но и разочарованы некоторые ее недостатки. Я хотел обратиться, но не как “Дсын 3.0”, отчасти потому, что я больше не работаю в Google. Джейк, Скотт, Эрик, и я создал Моши для решения различных ограничений Дсын. Вот десять причин, предпочитают Моши за Дсын:

  1. Предстоящий Котлин поддержки.

  2. Отбор, как @HexColor инт разрешить множественные представления JSON для одного типа Java.

  3. В @метод toJSON и FromJson позволяют легко писать и тестировать пользовательские JSON и адаптеры.

  4. JsonAdapter.failOnUnknown() позволяет отклонять неожиданные данные JSON.

  5. Предсказуемо исключения. Моши бросает IOException по проблемам Ио и JsonDataException на несоответствие типов. Дсын повсюду.

  6. JsonReader.selectName() избегает ненужной кодировке UTF-8 декодирования и строка распределения в общем случае.

  7. Вы будете грузить apk меньшего размера. Дсын составляет 227 КБ, Моши+Окио вместе 200 Кб.

  8. Моши не утечка деталей реализации типа платформы на ваш закодированный в JSON. Это заставляет меня бояться Дсын: дсын.метод toJSON(SimpleTimeZone.getTimeZone (на"мск" - а))

  9. Моши не странно в HTML сбегая по умолчанию. Посмотри на кодировку Дсын по умолчанию "и 12 & 5 = 4" в пример.

  10. Никаких сломанных дата адаптер установлен по умолчанию.

Если вы пишете новый код, я настоятельно рекомендую начать с Моши. Если у вас есть существующий проект с Gson, вы должны обновить, если это будет простым и не рискованным. В противном случае, палка с Gson! Я делаю все возможное, чтобы убедиться, что он остается совместимы и надежны.

Комментарии (2)