url表示統一資源定位器,指向世界上「資源」的指標全球資訊網。資源可以是簡單的檔案或目錄,或者它可以是對更複雜物件的引用,例如對資料庫或搜尋引擎的查詢。這個類的作用就是url的定位的作用,定位了每個資源符號引用的位置。整個url大體上就是對url內容進行規範,對url進行解析。
構造方法是通過檔案裡面的埠和檔案的訪問主機對這個url進行構造。
public
url(string protocol, string host,
int port, string file)
throws malformedurlexception
url的構造方法,這個構造方法裡面傳輸了url裡面的協議,主機名,埠號和檔名,最後通過流協議處理器來進行url的解析。
public
url(string protocol, string host,
int port, string file,
urlstreamhandler handler)
throws malformedurlexception
}
protocol = protocol.
tolowercase()
;this
.protocol = protocol;
//判斷主機名是否為空
if(host != null)
this
.host = host;
//埠號小於-1,丟擲異常說明這個埠號是無效埠。
if(port <-1
)this
.port = port;
//判斷主機名中是否有埠號
authority =
(port ==-1
)? host : host +
":"+ port;
}//parts類對檔案的資訊進行處理。
parts parts =
newparts
(file)
; path = parts.
getpath()
; query = parts.
getquery()
;if(query != null)
else
ref = parts.
getref()
;if(handler == null &&
(handler =
geturlstreamhandler
(protocol)
)== null)
this
.handler = handler;
//呼叫url流處理器來進行url的解析。
if(host != null &&
isbuiltinstreamhandler
(handler))}
//判斷是否是jar的連線協議if(
"jar"
.equalsignorecase
(protocol))}
}}
url反序列化狀態值
public
urldeserializedstate
(string protocol,
string host,
int port,
string authority, string file,
string ref,
int hashcode)
檔案資訊分離,分離「#」符號以後的引用內容,分離"?"以後的引數。見文末「#」引用在url位址中的作用。
class
parts
else
} string getpath()
string getquery()
string getref()
}
url讀取內容處理方法。設定urlstreamhandler 目的是為了進行開啟連線和進行url的字串的解析。
private object readresolve()
throws objectstreamexception
else
return replacementurl;
}//設定url反序列化引數。
private url setdeserializedfields
(urlstreamhandler handler)
}else
if(authority != null)
//構造路徑和查詢部分
string path = null;
string query = null;
if(file != null)
else
path = file;
}//設定物件字段。
this
.protocol = protocol;
this
.host = host;
this
.port = port;
this
.file = file;
this
.authority = authority;
this
.ref = ref;
this
.hashcode = hashcode;
this
.handler = handler;
this
.query = query;
this
.path = path;
this
.userinfo = userinfo;
replacementurl =
this
;return replacementurl;
}
static
final string builtin_handlers_prefix =
"sun.net.www.protocol"
;boolean
isbuiltinstreamhandler
(urlstreamhandler handler)
private
boolean
isbuiltinstreamhandler
(string handlerclassname)
//臨時引數存放
private
transient urldeserializedstate tempstate;
private url fabricatenewurl()
throws invalidobjectexception
catch
(malformedurlexception mex)
replacementurl.
setserializedhashcode
(tempstate.
gethashcode()
);resetstate()
;return replacementurl;
}
final
class
urldeserializedstate
//預計算stringbuilder的長度
int len = protocol.
length()
+1;if
(authority != null && authority.
length()
>0)
len +=
2+ authority.
length()
;if(file != null)
if(ref != null)
len +=
1+ ref.
length()
; stringbuilder result =
newstringbuilder
(len)
; result.
(protocol)
; result.
(":");
if(authority != null && authority.
length()
>0)
if(file != null)
if(ref != null)
return result.
tostring()
;}}
附:url類的使用方法
url中#的作用
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
思科VPP原始碼分析(dpo機制原始碼分析)
vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...
redux原始碼分析(三) 原始碼部分
下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...