Fastjson代码分析团队分工及代码介绍

2023-12-24 20:10

本文主要是介绍Fastjson代码分析团队分工及代码介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2021SC@SDUSC

我们小组共有4人,对fastjson开源项目的代码进行分析

目录

fastjson代码简介

fastjson代码分析的必要性和重要性

fastjson API使用(JAR包)示例

fastjson代码概述

团队分工

总结


fastjson代码简介

fastjson开源git仓库:https://github.com/alibaba/fastjson

fastjson是一个能将Java对象转化成JSON格式的一个Java类库;fastjson也可以将JSON字符串转化为对应的Java对象。fastjson可以以Jar包的形式,嵌入已存在的各Java项目中以供调用。


fastjson代码分析的必要性和重要性

  1. 当前服务器与客户端(Browser-Server架构)交互的绝大多数形式都是JSON,在server端极度需要一个高性能、低资源占用的JSON转化器
  2. Java在Server端占据了绝大多数,几乎全部后端服务器都是Java实现,需要一个基于Java的JSON转化器
  3. fastjson是当前世界上性能最好的Java端JSON转化ng器,分析其中的核心优质代码,对于我们了解Java性能优化、JSON转化对内部逻辑实现,提高Java开发技巧等都有着很重要的意义

fastjson API使用(JAR包)示例

1、使用IDEA新建项目,添加maven依赖pom.xml

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version>
</dependency

2、示例代码如下

import com.alibaba.fastjson.JSON;public class JSONTest {public static void main(String[] args) {Person onePerson=new Person("Liam",20,"10001");String JSONString= JSON.toJSONString(onePerson);System.out.println(JSONString);Person nextPerson=JSON.parseObject(JSONString,Person.class);}
}

打印的JSONString为

{"age":20,"ID":"10001","name":"Liam"}

可以看出fastjson已经生成了可以由前端浏览器识别的JSON字符串

同时,通过设置断点,查看内存中存储的nextPerson对象是否与onePerson相同

 

可以看到两个对象相同。

其中Person类如下。特别地,Person类有的getter、setter,否则私有成员变量无法序列化、也无法赋值。

public class Person {private String name;private int age;private String ID;public Person() {name="";age=-1;ID="";}public Person(String name, int age, String ID) {this.name = name;this.age = age;this.ID = ID;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getID() {return ID;}public void setID(String ID) {this.ID = ID;}
}

fastjson代码概述

经过我们组对fastjson开源代码的了解以及简单分析,我们得出以下结论

  1. JSON抽象类是主类,设计了fastjson需要实现的所有功能的方法模型
  2. JSONObejct,JSONArray继承了JSON抽象类,实现了抽象方法,是方法的核心,也是使用fastjson JAR包用户主要使用的对象

 

由于JSON类规定了绝大部分对外的函数接口,以下重点分析JSON抽象类包含的方法:

  1. parse及其他同类方法:将输入的JSON字符串转化为某个Java类
  2. toJSONString及同类方法:将传入的Java对象转化为JSON字符串
  3. put,set方法:手动设置JSON对象的某个属性值
  4. 其他内部方法:为parse、toString等方法提供服务,将相同内容提取出。

此外,fastjson还编写了为JSON及其派生类提供服务的类,根据功能不同存放在不同的包内,以下简要介绍

  • annotation包:fastjson项目组编写的Java注解包
  • parser包:为parse及同类方法提供服务的包,主要以deserializer(反序列化)为主
  • serializer包:为toString类型的方法提供服务,主要负责将JSON对象转化为字节流,提供给toString方法使用
  • support包:主要存放fastjson调用的其他开源代码
  • util包:存放为fastjson功能提供基础服务的类

此外,还有pom.xml等其他文件,是fastjson项目使用的包括maven在内的项目管理等工具等配置文件


团队分工

  1. 成凯、李伟涛主要关注toString类型的方法
  2. 我负责parse这一类方法中的parseArray(一系列重载函数)的代码分析
  3. 何梓瑞负责parse中的parseObject一系列的方法

在组内讨论时,我们发现parse的方法和toString方法内部逻辑大有不同,所以我们将这两类分开进行讨论。我和何梓瑞负责parse的方法,在parse方法中,存在大量有可能共用的方法(parser),我们决定一起讨论;与此同时我们俩各自确定一个调用parser的方法方向,我选择了parseArray,何梓瑞选择了parseObject,细节有待于根据代码进行更具体分析后的讨论。


总结

fastjson代码的分析才刚刚开始,我们组内成员还只停留在代码的结构分析上,有待进一步深入,按照先前的分工对代码进行深入的分析、解读。按照计划,我们将在下个星期开始对fastjson的各方法开始分析工作。感谢戴老师的指导,感谢各位老师的阅读

这篇关于Fastjson代码分析团队分工及代码介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532983

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析