對URL,URLConection的原始碼的分析

2022-05-09 04:15:09 字數 2156 閱讀 4894

客戶端鏈結網路獲取資料一般使用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()方法

來了,劃重點!!!!!!

沒錯就這樣鏈結上了.................................嚴謹

第一次寫分析原始碼,思路不是很清晰,請見諒,有錯大家可以指出來交流交流,謝謝大家

對建立游標對理解

步驟 1 首先經過底層的 編寫已經建立起了了python和資料庫之間的溝通橋梁並封裝成了模組,通過pymysql下的conntent 方法與之建立起了連線,例項物件。pymysql.connect 方法返回的是connections模組下的connection 例項,connect 方法傳參就是在給...

對勾函式 對勾函式

對勾函式是一種類似於反比例函式的一般函式。所謂的對勾函式,是形如 f x ax b x 的函式,是 一種教材上沒有但考試老喜歡考的函式,所以更加要注意和學習。一般的函式影象形似兩個中心對稱的 對勾,故名。當x 0 時,f x ax b x 有最小值 這裡為了研究方便,規定a 0 b 0 也就是當 x...

一對多 多對一

pip install djangorestframework 3.9.2 pip install markdown 3.0.1 markdown support for the browsable api.pip install django filter 2.1.0 filtering supp...