android中的Moshi vs Gson
我正在决定是否使用或Gson来序列化和反序列化模型数据 我一直不喜欢Gson的一点是,我认为它使用的反射在android上可能会很慢?摩希也使用反射吗 moshi vs Gson的一些优缺点是什么 我认为他们是相似的。以创建android中的Moshi vs Gson,android,gson,deserialization,moshi,Android,Gson,Deserialization,Moshi,我正在决定是否使用或Gson来序列化和反序列化模型数据 我一直不喜欢Gson的一点是,我认为它使用的反射在android上可能会很慢?摩希也使用反射吗 moshi vs Gson的一些优缺点是什么 我认为他们是相似的。以创建typeAdapter: class CardAdapter { @ToJson String toJson(Card card) { return card.rank + card.suit.name().substring(0, 1); } @Fro
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字符。例如,它从不需要将整数文本转换为字符
如果您正在编写新代码,我强烈建议您从Moshi开始。如果您有一个使用Gson的现有项目,您应该升级,如果这样做简单且没有风险的话。否则就坚持使用Gson!我正在尽最大努力确保它保持兼容和可靠。从前面的链接中可以看到,使用moshi codegen将为模型类创建编译时适配器,这将消除运行时反射的使用 模型 app/build.gradle
kapt "com.squareup.moshi:moshi-kotlin-codegen:$version_moshi"
将生成带有验证的MyModelJsonAdapter类,以确保模型属性的可空性。是否使用reflection@j2emanue作为实施细则,,自定义类的默认JSONAdapter将设置带有反射的字段。@使用codegen可以避免j2emanue反射。您不认为moshi会更快吗?
kapt "com.squareup.moshi:moshi-kotlin-codegen:$version_moshi"