微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FastJson 原理

1 序列化:通过asm 获取对象上的属性的get方法集合,然后通过调用相应的方法拼装出json字符串。


2 反序列化:通过asm 获取对象上的属性的set方法集合,然后调用set方法集合,赋值到相应的属性

所有的parser基本上都需要做词法处理,json也不例外。fastjson词法处理的时候,使用了基于预测的优化算法。比如key之后,最大的可能是冒号":",value之后,可能是有两个,逗号","或者右括号"}"。


3 封装了ASM,直接操作java类文件获取要序列化和反序列化的类的属性方法,get set 等。


4 实现了一个类似StringBuffer的可以append的对字符串操作的类。实现了Appendable接口。

SerializeWriter功能和StringBuffer类似。里面增加了ThreadLocal变量来存储char[]buf 数组,减少对内存的分配与回收。

提供一些针对性的方法减少数组越界检查。


5 IdentityHashMap 个人感觉这个map实现仅仅是针对fastJson场景用来存储类(.class,加载时就分配规定的内存地址)。所以该类不适合做其他用处。

publicclassIdentityHashMap<K,V>{

publicstaticfinalintDEFAULT_TABLE_SIZE=1024;

privatefinalEntry<K,V>[]buckets;
privatefinalintindexMask;

publicIdentityHashMap(){
this(DEFAULT_TABLE_SIZE);
}

publicIdentityHashMap(inttableSize){
this.indexMask=tableSize-1;
this.buckets=newEntry[tableSize];
}
//要求必须用同一个内存分配的对象去取才可以,不然buckets定位不到,或者==判断通过重新分配的值相同的String//会有问题。
publicfinalVget(Kkey){
finalinthash=System.identityHashCode(key);
finalintbucket=hash&indexMask;

for(Entry<K,V>entry=buckets[bucket];entry!=null;entry=entry.next){
if(key==entry.key){
return(V)entry.value;
}
}

returnnull;
}

publicbooleanput(Kkey,Vvalue){
finalinthash=System.identityHashCode(key);
finalintbucket=hash&indexMask;

for(Entry<K,V>entry=buckets[bucket];entry!=null;entry=entry.next){
if(key==entry.key){
entry.value=value;
returntrue;
}
}

Entry<K,V>entry=newEntry<K,V>(key,value,hash,buckets[bucket]);
buckets[bucket]=entry;

returnfalse;
}

publicintsize(){
intsize=0;
for(inti=0;i<buckets.length;++i){
for(Entry<K,V>entry=buckets[i];entry!=null;entry=entry.next){
size++;
}
}
returnsize;
}

protectedstaticfinalclassEntry<K,V>{

publicfinalinthashCode;
publicfinalKkey;
publicVvalue;

publicfinalEntry<K,V>next;

publicEntry(Kkey,Vvalue,inthash,Entry<K,V>next){
this.key=key;
this.value=value;
this.next=next;
this.hashCode=hash;
}
}

}

原文地址:https://www.jb51.cc/json/289724.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐