Android의 Moshi 대 Gson
Moshi by square 또는 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 스트림을 사용하고있는 경우 특히 두드러집니다. 특히 Retrofit 및 OkHttp 사용자는 Moshi의 혜택을받습니다.
Moshi의 기원에 대한 추가 논의는 내 게시물 Moshi, 또 다른 JSON 프로세서에 있습니다.
reddit 에 대한 swankjesse의 의견에 따르면 :
저는 Gson에 대한 제 작업이 자랑 스럽지만 그 한계에 실망했습니다. 부분적으로는 더 이상 Google에서 일하지 않기 때문에이 문제를 해결하고 싶었지만 "Gson 3.0"은 아닙니다. Jake, Scott, Eric, 그리고 저는 Gson의 다양한 한계를 해결하기 위해 Moshi를 만들었습니다. Gson보다 Moshi를 선호하는 10 가지 작은 이유가 있습니다.
예정된 Kotlin 지원.
@HexColor int와 같은 한정자는 단일 Java 유형에 대해 여러 JSON 표현을 허용합니다.
@ToJson 및 @FromJson을 사용하면 사용자 지정 JSON 어댑터를 쉽게 작성하고 테스트 할 수 있습니다.
JsonAdapter.failOnUnknown ()을 사용하면 예기치 않은 JSON 데이터를 거부 할 수 있습니다.
예측 가능한 예외. Moshi는 IO 문제에 대해 IOException을 발생시키고 유형 불일치에 대해 JsonDataException을 발생시킵니다. Gson은 사방에 있습니다.
JsonReader.selectName ()은 일반적인 경우에 불필요한 UTF-8 디코딩 및 문자열 할당을 방지합니다.
더 작은 APK를 배송하게됩니다. Gson은 227KiB, Moshi + Okio는 합쳐서 200KiB입니다.
Moshi는 플랫폼 유형의 구현 세부 사항을 인코딩 된 JSON으로 유출하지 않습니다. 이로 인해 Gson이 두렵습니다. gson.toJson (SimpleTimeZone.getTimeZone ( "GMT"))
Moshi는 기본적으로 이상한 HTML 이스케이프를 수행하지 않습니다. 예를 들어 Gson의 기본 인코딩 인 "12 & 5 = 4"를보십시오.
기본적으로 설치된 손상된 날짜 어댑터가 없습니다.
새 코드를 작성하는 경우 Moshi로 시작하는 것이 좋습니다. Gson에 기존 프로젝트가있는 경우 간단하고 위험하지 않은 경우 업그레이드해야합니다. 그렇지 않으면 Gson을 고수하십시오! 호환성과 신뢰성을 유지하기 위해 최선을 다하고 있습니다.
참조 URL : https://stackoverflow.com/questions/43577623/moshi-vs-gson-in-android
'IT story' 카테고리의 다른 글
생성자 주입없이 서비스 인스턴스 얻기 (0) | 2020.12.25 |
---|---|
클래스에는 몇 개의 생성자가 있습니까? (0) | 2020.12.25 |
'bool'은 C ++의 기본 데이터 유형입니까? (0) | 2020.12.25 |
asp.net mvc에서 날짜 시간 값을 URI 매개 변수로 어떻게 전달합니까? (0) | 2020.12.25 |
Postgres를 사용하여 테이블의 두 번째 또는 세 번째 열 뒤에 테이블에 새 열을 추가하는 방법은 무엇입니까? (0) | 2020.12.25 |