标签:查看 不用 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