跳转到内容

Fastjson2

Fastjson2 是 Alibaba 维护的 Java JSON 库。它把 JSON token 读取、对象读写器、字段元数据和代码生成组合起来,在保留灵活扩展的同时缩短常见 POJO 的热路径。

Fastjson2 要围绕“输入格式 → token 读取 → 对象读写器 → 加速路径 → 安全边界”来读:

  1. JSONReader 为什么要按输入形态分派? 字节数组、UTF-8、UTF-16 和字符流的读取成本不同,专用 Reader 能减少中间字符串和重复解码。
  2. ObjectReader/ObjectWriter 为什么是核心? 它们把通用 JSON 语法和具体 Java 类型连接起来,字段匹配、构造、写出顺序和类型转换都集中在对象层。
  3. 代码生成何时有价值? 结构稳定、调用频繁的 POJO 可以通过 ASM/Lambda 减少反射;动态类型、复杂注解或不安全条件下需要回退到反射路径。
  4. 加速路径为什么不能脱离安全? 类型识别、自动类型和多态反序列化会扩大输入影响范围,性能优化必须服从明确的类型白名单和反序列化边界。
  5. 性能问题如何判断? 分别测 token 解析、对象构造、字段转换、分配和输出,不能把“用了字节码生成”直接等同于整体更快。

本册聚焦 alibaba/fastjson2 的 2.x 主线,重点分析 core 模块。Fastjson1 的 JSONSerializer、JavaBeanSerializer 和 AutoType 语义不能直接套用到 Fastjson2。

项 值
仓库 alibaba/fastjson2
主线 2.x
核心模块 fastjson2
主要入口 JSON、JSONReader、JSONWriter
对象层 ObjectReader、ObjectWriter
加速路径 ASM / Lambda / 反射回退
  • 用 JSONReader / JSONWriter 把 UTF-8、UTF-16、字节数组和文本输入统一到格式分派层。
  • 用 ObjectReader / ObjectWriter 将类型级逻辑与单次解析状态分离。
  • 用 FieldReader / FieldWriter 固化字段元数据,把反射发现成本移出热路径。
  • 对常见 Bean 生成 ASM 或 Lambda 访问代码,并保留反射回退以兼容复杂类型。
  1. JSON#parseObject / toJSONString:高层 API 到 reader/writer 的入口。
  2. JSONReader.of* / JSONWriter.of*:按输入介质和特性选择实现。
  3. ObjectReaderProvider#getObjectReader:类型到对象读写器的查找与缓存。
  4. ObjectWriterProvider#getObjectWriter:序列化器、字段 writer 和特性配置的查找。
  5. ObjectReaderBean / ObjectWriterAdapter:Bean 级读写主循环。
  6. ObjectReaderCreator / ObjectWriterCreator:反射、Lambda、ASM 创建策略。