疑问始于对okhttp文件上传和文件下载的进度的实现时产生。为什么okhttp能够驾驭上传大文件呢?文件上传过程中如何掌控文件的上传进度呢?okhttp发送请求时request时如何封装的呢?okhttp接收response的的底层时如何接收的呢?带着这些疑问,本人特意去翻看okhttp的代码实现。本文特此记录看代码过程中得到的一些答案。
request发送请求的过程细节
过程一:先发送header,flush(每写一段数据flush一次,直到写完数据);然后发送requestBody。之后读取header,再读取responseBody。
过程二:读取response时,先读取一部分流数据解析为header,从header中获取responseBody的Transfer-Encoding,若Transfer-Encoding是chunker数据,则返回原始输入流给client,client拿到原始的输入流自己操作。
http下载文件,在代码层对打开的输入流不做读取操作,底层会下载完整个文件吗
再client端对打开的输入流不多读取操作。用fiddler抓包试了,fiddler能成功抓到整个文件的二进制,不知道这种情况下底层为什么还是下完了整个文件,然后抓包软件抓到了文件。