fastJSON源码分析_6_ JSON字符流输出

2021SC@SDUSC

 本篇简介

在之前的篇章中,我们分析了JSON字节流输出方法writeJSONString(os,obj),除了这种JSON流输出外,还有一种JSON字符流的输出方法writeJSONString(writer,obj),本篇内容就按照之前的内容简单地讲解一下该方法的使用还有分析一下该方法的源码.

使用方法

将写入器作为参数传入,将会使用该写入器进行JSON字符串输出

 结果:

 源码分析

仍然先转到JSON类的代码:

  这里相比于字节流的输出少了很多代码,主要是:

  • filter配置
  • 序列化器的日期格式
  • 不会再调用SerializeWriter的write方法

但是相同的地方是都会初始化SerializeWriter和JSONSerializer,并且,将writer交给了SerializeWriter来管理了.这里我们主要看的就是当SerializeWriter初始化时传入了已有的写入器会怎么样.

 同样的,JSON序列化器会为我们的object制造并选择合适的序列化器,然后回调我们的SerializeWriter的写入方法.

 我们直接去看SerializeWriter方法中的write方法:

 可以看到,和字节流不同的是,这里利用writer输出将不会直接去扩充缓冲区的容量了,而是将其作为真正的缓冲区,也就是说在字符流的输出中,SerializeWriter充当了BufferWriter相同的角色,辅助我们的Writer进行快速的输出.

这里的getChar方法是字符串的复制

public void getChars(int srcBegin, int srcEnd, char[] dst,  int dstBegin)

参数

  • srcBegin - 要复制的字符串中第一个字符的索引。
  • srcEnd - 要复制的字符串中最后一个字符后面的索引。
  • dst - 目标数组。
  • dstBegin - 目标数组中的起始偏移量。

 

总结

经过分析,可以看出字符流和字节流输出虽然在选择对象序列化器上完全相同,但是在底层输出逻辑上却截然不同,在字节流中序列化写入器扮演的其实就是一个写入器的功能,而在字符流中却又作为了缓冲写入器来辅助传入的写入器工作,可以说是一个兼顾了泛用与速度的设计了.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值