亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

FastJson tutorial manual / Fastjson Android設(shè)計(jì)

Fastjson Android設(shè)計(jì)

Fastjson Android采用ASMDeserializerFactory設(shè)計(jì)

ASMDeserializerFactory是用來(lái)動(dòng)態(tài)使用ASM生成JavaBean的Deserializer,針對(duì)每個(gè)類(lèi)的特點(diǎn)進(jìn)行特別優(yōu)化,以獲得最快的性能。

1. 局限性

1.1 虛擬機(jī)兼容

目前ASMDeserializerFactory不能在android的dalvik虛擬機(jī)以及阿里云OS的lemur虛擬機(jī)上運(yùn)行。

虛擬機(jī)是否支持
Oracle Hotspot支持
dalvik不支持
lemur不支持
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 超多字段類(lèi)

目前ASMDeserializerFactory不支持超過(guò)200個(gè)字段JavaBean。做反序列化的時(shí)候,需要定義局部變量保存parse的結(jié)果,目前的asm框架不能定義超過(guò)256個(gè)變量,目前保守的做法是,如果字段數(shù)量超過(guò)200個(gè),則不使用ASMDeserializerFactory。

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

2 實(shí)現(xiàn)

2.1 創(chuàng)建實(shí)例

如果類(lèi)有缺省public的構(gòu)造函數(shù),直接使用new來(lái)創(chuàng)建實(shí)例;否則使用JavaBeanDeserializer.createInstance(DefaultJSONParser, Type)來(lái)創(chuàng)建實(shí)例。

2.2 定義字段是否已經(jīng)被parse的標(biāo)識(shí)變量

每32個(gè)變量的flag保存在一個(gè)int類(lèi)型的變量中,_setFlag和_isFlag分別用于設(shè)置和讀取其是否被parse。