码迷,mamicode.com
首页 > Web开发 > 详细

对URL,URLConection的源码的分析

时间:2017-11-17 13:18:22      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:查看   不用   cti   png   blog   alt   bsp   mha   查看类   

客户端链接网络获取数据一般使用URL类

URL ulr = new URL(" ");

URLConnection connection = url.openConnection();-------------该方法返回的是一个URLConnection对象

 connection.getInputStream()--------------------链接网络并获取数据

具体是怎么链接到网络服务器的呢

下面进入openConnection()方法中

技术分享

从源码知道,这个方法教给了URLStreamHandler handler;处理 器去实现

 

下一步点击进入handler.openConnetion()发现该方法是一个抽象方法,具体实现交给了子类

技术分享

 

我们在idea中查看该处理器的结构

技术分享

 

下一步是找handler.openConnetion()方法的具体实现,我们点进

技术分享

发现最终调用实现的是new HttpURLConnection();这个新建对象返回URLConnection.....那么我们可以想是否在这个对象进行初始化的时候就进行一些类似Socket的链接呢,

我们不着急,我们先看URLConnection这个类

 

我们在idea在URLConnection这个类名字按快捷键ctrl + h查看类的结构

如图

技术分享

 

URLConnection是一个抽象父类,我们发现刚才调用new HttpURLConnection()的方法中的所属于的类是这个的子类,那么我顺势进入HttpURLConnection这个类的构造方法好了

技术分享

用过查看源码并没有发现类似soket的链接

但是我们还有connection.getInputstream()方法还没有看

技术分享

该方法在抽象父类的默认实现是抛出异常的,那么我们直接看子类对该方法的覆盖就可以了

下面是HttpConnection的getInputstream()的实现

技术分享

我们可以看到最终调用的是getInputStream0()方法

 

 技术分享

其中我们只要关注的就是this.connect()方法就可以了,其余的可以省略....

 

技术分享

嗯..又在调用其他方法..那我们继续点进去就可以了

 在plainConnect0()的源码

技术分享

我们可以不用关注这些,我们可以看到最终有用的下面这个

 

 技术分享

调用this.getNewHttpClient()方法...

技术分享

然后在HttpClient.New() 方法中最重要的也就是

技术分享

new HttlClient();

 

因为这个方法中做了我们一直想看的事情!!!

 

 

 技术分享

看到最后面的openServer()!!!!!重点来了

技术分享

然后就是把重点放在doConnect()方法

技术分享

来了,划重点!!!!!!

技术分享

 

 没错就这样链接上了.................................严谨

 

 

第一次写分析源码,思路不是很清晰,请见谅,有错大家可以指出来交流交流,谢谢大家

 

对URL,URLConection的源码的分析

标签:查看   不用   cti   png   blog   alt   bsp   mha   查看类   

原文地址:http://www.cnblogs.com/wugaga/p/7850708.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!