fastjson深度源码解析- 序列化(一) - 序列化基础类型解析

本文深入探讨fastjson的序列化过程,从基础类型如整数、长整数、浮点数、枚举、单字符、Null和Boolean的角度出发,详细解析了SerializeWriter类的成员变量和函数。通过源码分析,揭示了fastjson高效序列化背后的实现细节和设计思想,旨在帮助读者更好地理解和使用fastjson。
摘要由CSDN通过智能技术生成

首先感谢高铁同学同意我撰写fastjson源码解析并且给予了必要的指导,fastjson是一个高效的json与java对象序列化框架,很多公司和开源框架都从fastjson中受益。

目前网上公开的fastjson源码解析太少或者缺少深度,因此我计划通过研究源码的方式并记录下来,让更多想了解底层实现的同学受益。如果在阅读过程中发现错误,欢迎与我沟通 。

邮箱:jason.shang@hotmail.com
微信:skyingshang

可以在线阅读gitbookfastjson源码解析,也可以参考已经添加注释的源码fastjson注释版本_master分支

我在工作之余编写源码解析的目的:
  1. 做技术应该追求极致和细节,让更多的人拥抱开源并从中受益
  2. 深入理解fastjson作者的设计思想
  3. 掌握基本的词法和语法分析实现
  4. 源码是最好的教材,降低阅读开源代码的成本
  5. 巩固技术基础
  6. 分享是一种美德
为了尊重作者的劳动,如果您转载请保留以下内容:
文章作者 : 诣极(商宗海)
框架作者 : 高铁
文章地址 : https://zonghaishang.gitbooks.io/fastjson-source-code-analysis/content/
代码地址 : https://github.com/zonghaishang/fastjson
框架地址 : https://github.com/alibaba/fastjson

概要

fastjson核心功能包括序列化和反序列化,序列化的含义是将java对象转换成跨语言的json字符串。我认为从这里作为分析入口相对比较简单,第二章会从反序列化角度切入,会包含词法分析等较为复杂点展开。

现在,我们正式开始咀嚼原汁原味的代码吧,我添加了详细的代码注释。

SerializeWriter成员变量

com.alibaba.fastjson.serializer.SerializeWriter类非常重要,序列化输出都是通过转换底层操作,重要字段如下:

    /** 字符类型buffer */
    private final static ThreadLocal<char[]> bufLocal      = new ThreadLocal<char[]>();
    /** 字节类型buffer */
    private final static ThreadLocal<byte[]> bytesBufLocal = new ThreadLocal<byte[]>();

    /** 存储序列化结果buffer */
    protected char                           buf[];

    /** buffer中包含的字符数 */
    protected int                            count;

    /** 序列化的特性,比如写枚举按照名字还是枚举值 */
    protected int                            features;

    /** 序列化输出器 */
    private final Writer                     writer;

    /** 是否使用单引号输出json */
    protected boolean                        useSingleQuotes;
    /** 输出字段是否追加 "和:字符 */
    protected boolean                        quoteFieldNames;
    /**
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值