W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Fastjson 的Android版本采用的是ASMDeserializerFactory設(shè)計。
ASMDeserializerFactory是用來動態(tài)使用ASM(一種java字節(jié)碼操控框架)生成JavaBean的Deserializer(反序列化程序),針對每個類的特點進(jìn)行特別優(yōu)化,以獲得最快的性能。
目前ASMDeserializerFactory不能在android的dalvik虛擬機(jī)以及阿里云OS的lemur虛擬機(jī)上運行。
虛擬機(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
;
}
}
目前ASMDeserializerFactory不支持超過200個字段JavaBean。做反序列化的時候,需要定義局部變量保存parse的結(jié)果,目前的asm框架不能定義超過256個變量,目前保守的做法是,如果字段數(shù)量超過200個,則不使用ASMDeserializerFactory。
DeserializeBeanInfo beanInfo = DeserializeBeanInfo.computeSetters(clazz, type);
if (beanInfo.getFieldList().size() > 200) {
asmEnable = false;
}
如果類有缺省public的構(gòu)造函數(shù),直接使用new來創(chuàng)建實例;否則使用JavaBeanDeserializer.createInstance(DefaultJSONParser, Type)來創(chuàng)建實例。
每32個變量的flag保存在一個int類型的變量中,_setFlag和_isFlag分別用于設(shè)置和讀取其是否被解析。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: