标签:查看 不用 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()方法

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

没错就这样链接上了.................................严谨
第一次写分析源码,思路不是很清晰,请见谅,有错大家可以指出来交流交流,谢谢大家
标签:查看 不用 cti png blog alt bsp mha 查看类
原文地址:http://www.cnblogs.com/wugaga/p/7850708.html