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 virtuelle | Est-elle prise en charge |
Oracle Hotspot | Supporté |
dalvik | Non pris en charge |
lemur | Non 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.