Conception Android Fastjson


Fastjson Android est conçu avec ASMDeserializerFactory

ASMDeserializerFactory est un désérialiseur utilisé pour utiliser dynamiquement ASM pour générer des JavaBeans. Il est spécialement optimisé pour les caractéristiques de chaque classe afin d'obtenir les performances les plus rapides.

1. Limitations

1.1 Compatibilité des machines virtuelles

Actuellement, ASMDeserializerFactory ne peut pas fonctionner sur la machine virtuelle Dalvik d'Android et la machine virtuelle Lemur d'Alibaba Cloud OS.

Machine virtuelleEst-elle prise en charge
Oracle HotspotSupporté
dalvikNon pris en charge
lemurNon pris en charge
public class ASMUtils {
     public static boolean isAndroid(String vmName) {
        String lowerVMName = vmName.toLowerCase();
        return lowerVMName.contains("dalvik") 
                 || lowerVMName.contains("lemur") // aliyun-vm name
                 ;
     }
}

1.2 Classes super multi-champs

Actuellement, ASMDeserializerFactory ne prend pas en charge les JavaBeans avec plus de 200 champs. Lors de la désérialisation, vous devez définir des variables locales pour enregistrer les résultats de l'analyse. Le framework asm actuel ne peut pas définir plus de 256 variables. L'approche conservatrice actuelle est que si le nombre de champs dépasse 200, ASMDeserializerFactory n'est pas utilisé.

DeserializeBeanInfo beanInfo = DeserializeBeanInfo.computeSetters(clazz, type);
if (beanInfo.getFieldList().size() > 200) {
    asmEnable = false;
}

2 Implémentation

2.1 Créer une instance

Si la classe a un constructeur public par défaut, utilisez new directement pour créer l'instance, sinon utilisez JavaBeanDeserializer.createInstance(DefaultJSONParser, Type) pour créer ; l'instance.

2.2 Variable d'identification qui définit si le champ a été analysé

Le drapeau de chacune des 32 variables est stocké dans une variable de type int _setFlag et _isFlag sont utilisés pour définir et lire s'il a été analysé respectivement.