你的打赏是我奋笔疾书的动力!
okhttp中使用到的Okio对IO的操作进行了自己的封装,Okio拥有自己的缓存,Okio的读写都会经过自己的缓存,而Okio的缓存采用了池化的思想,也就是并不是用完了分配的内存就立即释放,在频繁读写的时候,提高了一定的性能。
Okio的主要类图如下:
Okio主要类的方法一栏如下:
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的示意图:
你的打赏是我奋笔疾书的动力!
支付宝打赏:
微信打赏:
转载请注明原文地址: https://ju.6miu.com/read-2940.html