Okhttp 底层库 okio -Buffer

回顾下几个重要的对象

  1. sink和source:定义了两个接口,此接口是对原有java io中outputStream和inputStream的替代(实际上是做了二次封装)
  2. Buffer:缓冲,内部是一个由segment组成的双向循环链表
  3. BufferedSink和BufferedSource:带缓冲功能的sink和source接口
  4. RealBufferedSink和RealBufferedSource:BufferedSink和BufferedSource的实现类,内部依赖Buffer和sink(source)对象

Buffer

前面已经说过RealBufferedSink和RealBufferedSouce内部的接口实现,实际上是依赖于Buffer和具体的Sink和Source。Buffer提供缓冲功能,sink和souce实现对象完成具体的数据传输。Buffer类中有个重要的方法,write(Buffer source, long byteCount),此方法是一个比较底层的方法,完成将source缓冲中的数据从头结点开始,移动byteCount数量到当前Buffer的尾部中去。


Buffer 在 OKHTTP 中定义的是一个不可变的序列,这个和 ArrayList 是一样的,在使用的时候,你不需要指定这个 Buffer 的大小。

Buffer 采取的是先进先出的方式,Buffer 的数据首先会写入末尾,然后从头进行读取。