okhttp中的Okio实现原理

你的打赏是我奋笔疾书的动力!​


okhttp中使用到的Okio对IO的操作进行了自己的封装,Okio拥有自己的缓存,Okio的读写都会经过自己的缓存,而Okio的缓存采用了池化的思想,也就是并不是用完了分配的内存就立即释放,在频繁读写的时候,提高了一定的性能。

Okio的主要类图如下:

okhttp中的Okio实现原理_第1张图片

 

Okio主要类的方法一栏如下:

         okhttp中的Okio实现原理_第2张图片okhttp中的Okio实现原理_第3张图片

 okhttp中的Okio实现原理_第4张图片

 

 

BufferedSource接口主要用来读取,BufferedSink接口主要用来写入;读取的源头来自于一股输入流,我们会用Okio工具类的source方法获取一个RealBufferedSource类来读入,写出的目的地是一股输出流,我们会用Okio工具类的sink方法获取RealBufferedSink类来写出;RealBufferedSource会读入到Buffer,同样RealBufferedSink写出会先写出到Buffer,读入的时候,不一定读入输入流中的全部数据到Buffer,视读入方法而定,写出的时候,不会全部写出到输出流,包括writeAll方法也不是全部写出到输出流,而只是把Buffer中满的Segment写出到输出流,然后在flush和close的时候,才会把Buffer中剩余的不满的Segment写出到输出流。而从输入流读入和写出到输出流这2个任务其实是分别交给了SourceImpl和SinkImpl来实现。

Buffer对内存做了简单的管理,它把内存看成一条环状的Segment链,每一个Segment有8192个字节大小,对Segment的使用也是使用了池化的思想,Buffer需要的时候从池里获取,不用的时候放入池中,下面是Buffer的示意图:

 

okhttp中的Okio实现原理_第5张图片

你的打赏是我奋笔疾书的动力!

支付宝打赏:

微信打赏:

 

你可能感兴趣的:(okhttp中的Okio实现原理)