Fastjson Android デザイン


Fastjson Android は ASMDeserializerFactory で設計されています

ASMDeserializerFactory は、ASM を動的に使用して JavaBeans を生成するために使用されるデシリアライザーであり、最速のパフォーマンスを得るために各クラスの特性に合わせて特別に最適化されています。

現在、ASMDeserializerFactory Android の dalvik 仮想マシンおよび Alibaba Cloud OS の lemur 仮想マシンでは実行できません。

#仮想マシンサポートかどうかOracle Hotspotサポートdalvikサポートされていません#サポートされていません1.2 スーパー マルチフィールド クラス
#キツネザル
#
public class ASMUtils {
     public static boolean isAndroid(String vmName) {
        String lowerVMName = vmName.toLowerCase();
        return lowerVMName.contains("dalvik") 
                 || lowerVMName.contains("lemur") // aliyun-vm name
                 ;
     }
}

現在、ASMDeserializerFactory は 200 を超えるフィールドを持つ JavaBeans をサポートしていません。逆シリアル化を行うときは、解析結果を保存するローカル変数を定義する必要があります。現在の asm フレームワークでは、256 を超える変数を定義できません。現在の保守的なアプローチでは、フィールド数が 200 を超える場合、ASMDeserializerFactory は使用されません。

2 実装

2.1 インスタンスの作成

If クラスデフォルトのパブリック コンストラクターがあり、new を直接使用してインスタンスを作成します。それ以外の場合は、JavaBeanDeserializer.createInstance(DefaultJSONParser, Type) を使用してインスタンスを作成します。

2.2 フィールドが解析済みかどうかを定義する識別変数

32 個の各変数のフラグは、int 型変数 _setFlag に格納されます。および _isFlag は、それぞれ解析されるかどうかの設定と読み取りに使用されます。