OKHTTP和Retrofit

本文深入探讨了OkHttp的基本网络实现原理,包括NIO、Okio、SPDY及GZIP的支持等内容,并详细介绍了Retrofit如何通过OkHttp进行异步请求的发送与处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本网络

基于NIO和Okio
NIO 就是 new IO,java 1.4之后采用的IO方案, 支持Buffer读写
OkIO 核心也是Buffer读写,内部使用了一个Segment和SegmentPool,维持着一个链表,其循环利用的机制和Android中Message的利用机制是一模一样的

Segment Buffer的写操作,实际上就是不断增加Segment的一个过程,读操作,就是不断消耗

Segment中的数据,如果数据读取完,则使用SegmentPool进行回收。

当复制内存数据时,使用Segment的共享机制,多个Segment共享一份data[]。

Buffer更多的逻辑主要是跨Segment读取数据,需要把前一个Segment的尾端和后一个Segment的前端拼接在一起,因此看起来代码量相对多,但其实开销非常低。


支持 SPDY
基于TCP的应用层协议,是对HTTP协议的增加,包括数据流的多路复用,报头压缩,请求优先级等

支持GZIP
有GZIPInputStream , GzipSource(OutputStream) ,GzipSink(InputStream)

封装了线程池,数据转换,基本错误处理等

Android 4.4之后替代了HtpUrlConnection


Retrofit

异步请求的发送请求过程

步骤1:对网络请求接口的方法中的每个参数利用对应ParameterHandler进行解析,再根据ServiceMethod对象创建一个OkHttp的Request对象;
步骤2:使用OkHttp的Request发送网络请求;
步骤3:对返回的数据使用之前设置的数据转换器(GsonConverterFactory)解析返回的数据,最终得到一个Response对象;
步骤4:进行线程切换从而在主线程处理返回的数据结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值