从OkHttp的源码来看 HTTP】的更多相关文章

先来了解一下OkHttp的历史,最早是square公司觉得Android给的HttpClient这块的库不太好用,于是乎做了一层包装,再后来他们包装的这个库被Android官方给收回去了,而Android内部的HttpUrlConnection的实现用的其实是OkHttp的代码,而Okhttp是完全重新写的一套HTTP库,包含TCP.TLS的实现,最初是依赖于Google的那套网络框架,而现在完全不依赖了,最终还被Google给收购了,所以,好好了解OkHttp的本质是毋庸置疑的. 先上一下Ok…
关于Retrofit是啥,这里就不多解释了,还是先来瞅下官网: 而这次主要是了解它的底层动作机制,而在了解底层之前先来回顾一下官网的整体使用步骤: 咱们也以官网的这个例子为例,先从简单的使用开始逐步深入,先新建一个工程: 然后增加retrofit的build引用 ,如下: 然后按官网的步骤,首先创建一个API接口,如下: 咱们以获取用户在github中的仓库为例,定义接口的API方法如下: 然后具体来调用一下,也如官网的描述一样: 然后此时并未发起HTTP请求,需要像okhttp那样调用一下这个…
对于okhttp在如今项目中的普及程度已经不言而喻啦,基本上如今网络请求都会基于它去进行封装,而非前几年用Android的网络框架HttpURLConnection和Apache HttpClient去进行底层网络访问的封装了,就目前而言它应该是最火热的网络请求开源项目了,既然这么多公司的项目都采用它肯定是有原因的,所以百度百科上对它的优劣列举了下: 另外再闲扯一下,它是由移动支付Square公司贡献的,说到Square,我想有一位Android大神不得不提,看图说话: 其中它对okhttp的贡…
上一篇花了点时间将同步器看了一下,心中对锁的概念更加明确了一点,知道我们所使用到的锁是怎么样获取同步状态的,我们也写了一个自定义同步组件Mutex,讲到了它其实就是一个简版的ReentrantLock,本篇文章我们就来看看ReentrantLock底层是怎么样的! 目录结构: ReentrantLock 公平锁与非公平锁 ReentrantReadWriteLock ReentrantLock ReentrantLock我们叫做可重入锁,也就是我们可以重复进入的意思,也就是表示,一个线程可以对指…
HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用,接触到实际的工作之后深知自己知识的不足,故而深挖框架源码尽力吸取前辈的设计经验.关于此框架的源码解析网上的教程多不胜数,此文名为源码解析,实则是炒冷饭之作,如有错误和不足之处还望各位看官指出. 拦截器 拦截器是OkHttp框架设计的精髓所在,拦截器所定义的是Request的所通过的责任链而不管Re…
前言: 如果说J.U.C包下的核心是什么?那我想答案只有一个就是AQS.那么AQS是什么呢?接下来让我们一起揭开AQS的神秘面纱 AQS是什么? AQS是AbstractQueuedSynchronizer的简称.为什么说它是核心呢?是因为它提供了一个基于FIFO的队列和state变量来构建锁和其他同步装置的基础框架.下面是其底层的数据结构. AQS的特点 1.其内使用Node实现FIFO(FirstInFirstOut)队列.可用于构建锁或者其他同步装置的基础框架 2.且利用了一个int类表示…
前言 说到源码,很多朋友都觉得复杂,难理解. 但是,如果是一个结构清晰且完全解耦的优质源码库呢? OkHttp就是这样一个存在,对于这个原生网络框架,想必大家也看过很多很多相关的源码解析了. 它的源码好看,易读,清晰,所以今天我准备从设计模式的角度再来读一遍 OkHttp的源码. 主要内容就分为两类: okhttp的基本运作流程 涉及到的设计模式 (本文源码版本为okhttp:4.9.0,拦截器会放到下期再讲) 使用 读源码,首先就要从它的使用方法开始: val okHttpClient = O…
前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜欢 在阅读本文前,建议先阅读文章:这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解) 目录 1. 简介 特别注意: 准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装. 原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责…
Android精选源码 开源新闻小程序源码分享 android动态壁纸.锁屏动画.来电秀等源码 android笔记App效果源码 Android实现3D版翻页公告效果 android小说搜索阅读源码 Android纯Kotlin开发TODO清单 兼容Android P 模仿Airbnb悬浮搜索框根据滑动展开收起的效果 Android高仿拼多多商城分类列表 Android仿薄荷健康的滑动卷尺效果[绘图(canvas)] android标签布局效果源码分享 Android优质博客 Okhttp缓存源…
背景: 闲来无事,翻了下co的源码来看,源码短小精悍,算上注释,一共240行左右: 决定写一篇博客来记录下学习的心得. TJ大神的co:https://github.com/tj/co 作用: co通过将Generator函数拆成一个Promise将码农从callback hell中拯救了出来: 下边放出一段代码,对比下co与普通回调版本的区别: /** * 回调版本 */ let fs = require('fs') fs.readFile('./package.json', (err, da…
今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则直接返回. 定义变量: var hasScrollLeft = 'scrollLeft' in this[0] 在zepto中用到了很多类似的特性检测的方法,判断浏览器是否支持mousedown一特性,如果支持,则直接使用该特性,如果不支持,则利用其他方法来实现. 这里是在判断浏览器是否支持scro…
今天介绍的是与子元素相关的函数,children, find, contents children 从源码来看,主要是调用过滤函数filtered对遍历整个包装集返回的children进行过滤. 仔细看来,最终实现children依赖的是内部定义的children函数. 在支持直接获取元素children属性的浏览器当中,直接通过elment.children获取子元素,通过调用slice函数,返回数组对象,如果不支持element.children,则对element.childNodes进行…
第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, class OutputIterator>  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result); 函数作用: 将[first,last)区间的元素拷贝至result开头的迭代器区间,并返回赋…
本博文的主要内容是: 1.rdd基本操作实战 2.transformation和action流程图 3.典型的transformation和action RDD有3种操作: 1.  Trandformation      对数据状态的转换,即所谓算子的转换 2.  Action    触发作业,即所谓得结果的 3.  Contoller  对性能.效率和容错方面的支持,如cache.persist.checkpoint Contoller包括cache.persist.checkpoint. /…
在上一篇中说到了mailbox_t的底层实际上使用了管道ypipe_t来存储命令.而ypipe_t实质上是一个无锁队列,其底层使用了yqueue_t队列,ypipe_t是对yueue_t的再包装,所以我们先来看看yqueue_t是怎么实现的. 1.yqueue_t yqueue_t是一个高效的队列,高效体现在她的内存配置上,尽量少的申请内存,尽量重用将要释放的内存.其实,容器的设计都会涉及这点--高效的内存配置器,像sgi stl容器的内存配置器,使用了内存池,预先分配一块较大内存,用不同大小的…
http://my.eoe.cn/futurexiong/archive/181.html 开发第三方Android应用的,大多数人应该还是Eclipse结合ADT来开发.那么大多数时候我们可能希望点击API提供的一个类或者一个方法或者一个变量,从而进入API相关的源码中进行查看,用于Debug或者就是想阅读下API源码啥的,去下载对应版本的framework源码来看又稍嫌麻烦耗时,这时候一般我们都希望使用Eclipse中Source attachment来关联android.jar的源码.但是…
urllib2 源码小剖 2013-08-25 23:38 by 捣乱小子, 272 阅读, 0 评论, 收藏, 编辑 两篇小剖已经完成: urllib 源码小剖 urllib2 源码小剖 urllib2 对 urllib 改进了好些,整个思路都改了,变得更加灵活,有“高内聚,低耦合”的味道. 看看 urllib2 的新特性: 将对 url 的处理单独成一个 request 类 URLopener 和 FancyURLopener 都下架,取而代之的是 OpenerDirector 另添加了 N…
JDBC的知识对于JAVA开发人员来讲在简单不过的知识了.PreparedStatement的作用更是胸有成竹.我们最常见用到有俩个方法:executeQuery方法和executeUpdate方法.这俩个方法之外还有一个execute方法.只是这个方法我们很少用.但是mybatis框架就是却用这个方法来实现的.不管mybatis用是哪一个方法来实现.有一点可以肯定--那就是必须得到Statement接口实例.你可以这样子理解mybatis把如何获得Statement接口实例做了一个完美的封装.…
一.前言 今天我们来看一下本次集合源码阅读里的最后一个Map--IdentityHashMap.这个Map之所以放在最后是因为它用到的情况最少,也相较于其他的map来说比较特殊.就笔者来说,到目前为止还没有用到过它 ┐(゚-゚)┌.它的罕见与它的用途有关,当时的Map设计者是这么说的: This class is designed for use only in the rare cases wherein reference-equality semantics are required. 这…
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/answershuto/learnVue.在学习过程中,为Vue加上了中文的注释https://github.com/answershuto/learnVue/tree/master/vue-src,希望可以对其他想学习Vue源码的小伙伴有所帮助.可能会有理解存在偏差的地方,欢迎提issue指出,共同学…
一丶什么是线程池 (1)博主在听到线程池三个字的时候第一个想法就是数据库连接池,回忆一下,我们在学JavaWeb的时候怎么理解数据库连接池的,数据库创建连接和关闭连接是一个比较耗费资源的事情,对于那些数量多且时间短暂的任务,会导致频繁获取和释放连接,这样使得处理事务的效率大大降低,多以我们创建一个连接池,里面放了指定数目的连接,当应用需要数据库连接的时候去里面获取,使用完毕后再放到连接池里,这样就避免了重复的获取连接和释放连接,至于要获取什么样的连接池我们可以根据应用的特征,设置参数来决定. (…
在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码中通过控制View.VISIABLE动态的更改它的可见性.这样的做法的优点是逻辑简单而且控制起来比较灵活.但是它的缺点就是,耗费资源,虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性.也就是说,会…
前言: 在我们还没学习框架之前,肯定都学过JDBC.百度百科对JDBC是这样介绍的[JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名.]通过JDBC我们可以完成Java对关系型数据库的SQL操作.下面我们介绍的这种模式是J…
​在此之前有无数次下定决心要把JDK的源码大致看一遍,但是每次还没点开就已被一个超链接或者其他事情吸引直接跳开了.直到最近突然意识到,因为对源码的了解不深导致踩了许多莫名其妙的坑,所以再次下定决心要把常用的类全部看一遍... 一. 声明和成员变量(不可变性) public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[…
最近想提升,苦逼程序猿,想了想还是拿最熟悉,之前也一直想看但没看的spring源码来看吧,正好最近在弄事务这部分的东西,就看了下,同时写下随笔记录下,以备后查. spring tx源码分析 这里只分析简单事务也就是DataSourceTransactionManager 首先肯定找入口了,看过spring源码的同学一定都会找spring tx的入口就是在TxAdviceBeanDefinitionParser这里将解析tx的配置,生成TransactionInterceptor对象,这个也就是一…
我们知道,使用面对对象编程的时候有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志.安全检测等,所以就有了一个对面对对象编程的补充,即面对切面编程(AOP),AOP所关注的方向是横向的,不同于OOP的纵向. Spring2.0采用@AspectJ注解来定义一个包含切点信息和增强横切逻辑的切面,这样的方案比采用配置的方案要来得更方便. 那要支持注解方式的AOP,首先需要在配置文件中添加一行配置 <aop:aspectj-autoproxy/> 我们的分析首先就从这里开始.…
最近这段时间在学习how tomcat works这本书,需要结合书上的例子对照tomcat源码来看,需要导入tomcat的源码,所以在网上找了很多教程,结合自己遇到的问题,记录如下: 1.前期准备 1.1 tomcat源码下载 本例中下载的tomcat版本为tomcat-8.5.31,下载地址为https://tomcat.apache.org/download-80.cgi,如下: 1.2 ant安装 因为tomcat是用ant构建的,所以需要在apace ant官网上下载ant,本例版本为…
环境搭建的步骤有哪些 依赖外部的环境 使用的开发工具 源码的拉取 结构大致介绍 1 依赖的外部环境 安装JDK 安装Git 安装maven 这边我们就不介绍怎么安装这些外部环境了,大家自行从安装这些外部环境哈 2 使用的外部工具 编辑器使用 IntelliJ IDEA (简单好用,快捷键丰富) GitHub Desktop GitHub的客户端软件,用起来真顺手 3 源码的拉取 源码的话我们上GitHub 上面直接拉取dubbo的源码即可, Dubbo 然后我们 Fork出一个属于我们自己的仓库…
DownloadProvider 简介 DownloadProvider 是Android提供的DownloadManager的增强版,亮点是支持断点下载,提供了“开始下载”,“暂停下载”,“重新下载”,“删除下载”接口.源码下载地址 DownloadProvider 详细分析 DownloadProvider开始下载的是由DownloadManager 的 enqueue方法启动的,启动一个新的下载任务的时序图  开始新的下载时候会调用DownloadManager的enqueue方法,然后再…
Spring Boot 命名配置很少,却可以做到和其他配置复杂的框架相同的功能工作,从源码来看是怎么做到的. 我这里使用的Spring Boot版本是 2.0.1.RELEASE Spring Boot最重要的注解: @SpringBootApplication 打开它: 其中的几个注解: @SpringBootConfiguration 标注这个类是一个配置类,类似Spring的@Configuration @EnableAutoConfiguration 开启自动配置 @ComponentS…