okhttp中的Okio实现原理

来源:互联网 发布:小米手机清除所有数据 编辑:程序博客网 时间:2024/06/01 18:34

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

Okio的主要类图如下:


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

         

 

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

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



0 0
原创粉丝点击