新聞中心
URI

懷仁ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
java.lang.Object
|---java.net.URI
public final class URI
extends Object
implements Comparable, Serializable
表示統(tǒng)一資源標(biāo)識(shí)符 (URI) 引用。
除了下面提到的一些小偏差之外,此類的一個(gè)實(shí)例表示由 RFC 2396 定義的 URI 引用:統(tǒng)一資源標(biāo)識(shí)符 (URI):通用語法,由 RFC 2732 修訂:URL 中文字 IPv6 地址的格式。 Literal IPv6 地址格式也支持 scope_ids。 此處描述了 scope_ids 的語法和用法。 此類提供了用于從其組件或通過解析其字符串形式創(chuàng)建 URI 實(shí)例的構(gòu)造函數(shù)、用于訪問實(shí)例的各種組件的方法,以及用于規(guī)范化、解析和相對(duì)化 URI 實(shí)例的方法。 此類的實(shí)例是不可變的。
URI 語法和組件 在最高級(jí)別,字符串形式的 URI 引用(以下簡(jiǎn)稱“URI”)具有以下語法
[scheme:]scheme-specific-part[#fragment]
其中方括號(hào) [...] 描述可選組件,字符 : 和 # 代表它們自己。
絕對(duì) URI 指定方案; 一個(gè)非絕對(duì)的 URI 被稱為是相對(duì)的。 URI 還根據(jù)它們是不透明的還是分層的進(jìn)行分類。
不透明 URI 是絕對(duì) URI,其特定于方案的部分不以斜杠字符 ('/') 開頭。 不透明的 URI 不受進(jìn)一步解析的影響。 不透明 URI 的一些示例是:
分層 URI 要么是絕對(duì) URI,其特定于方案的部分以斜杠字符開頭,要么是相對(duì) URI,即不指定方案的 URI。 分層 URI 的一些示例是:
http://java.sun.com/j2se/1.3/ docs/guide/collections/designfaq.html#28 ../../../demo/jfc/SwingSet2/src/SwingSet2.java file:///~/calendar
分層 URI 需要根據(jù)語法進(jìn)行進(jìn)一步解析
scheme:path[#fragment]
其中字符 :、/、? 和 # 代表它們自己。 分層 URI 的特定于方案的部分由方案和片段組件之間的字符組成。
如果指定,分層 URI 的權(quán)限組件是基于服務(wù)器的或基于注冊(cè)表的。 基于服務(wù)器的權(quán)限根據(jù)熟悉的語法進(jìn)行解析
[user-info@]host[:port]
其中字符 @ 和 : 代表它們自己。目前使用的幾乎所有 URI 方案都是基于服務(wù)器的。不以這種方式解析的權(quán)限組件被認(rèn)為是基于注冊(cè)表的。
如果分層 URI 的路徑組件以斜杠字符 ('/') 開頭,則它本身就是絕對(duì)的;否則是相對(duì)的。分層 URI 的路徑要么是絕對(duì)的,要么是指定權(quán)限的,它始終是絕對(duì)的。
總而言之,一個(gè) URI 實(shí)例有以下九個(gè)組成部分:
在給定的實(shí)例中,任何特定組件要么未定義,要么具有不同的值。未定義的字符串組件由 null 表示,而未定義的整數(shù)組件由 -1 表示。可以將字符串組件定義為將空字符串作為其值;這不等于未定義該組件。
特定組件是否在實(shí)例中定義取決于所表示的 URI 的類型。絕對(duì) URI 有一個(gè)方案組件。一個(gè)不透明的 URI 有一個(gè)方案、一個(gè)特定于方案的部分,可能還有一個(gè)片段,但沒有其他組件。分層 URI 總是有一個(gè)路徑(盡管它可能是空的)和一個(gè)特定于方案的部分(至少包含路徑),并且可能有任何其他組件。如果權(quán)限組件存在并且是基于服務(wù)器的,那么將定義主機(jī)組件并且可以定義用戶信息和端口組件。
URI 實(shí)例上的操作 此類支持的關(guān)鍵操作是規(guī)范化、解析和相對(duì)化。
規(guī)范化是刪除不必要的“。”的過程。和“..”來自分層 URI 的路徑組件的段。每個(gè) ”?!倍伪缓?jiǎn)單地刪除。僅當(dāng)“..”段前面有非“..”段時(shí),才會(huì)刪除“..”段。規(guī)范化對(duì)不透明的 URI 沒有影響。
解析是根據(jù)另一個(gè)基本 URI 解析一個(gè) URI 的過程。生成的 URI 以 RFC 2396 指定的方式由兩個(gè) URI 的組件構(gòu)成,從原始 URI 中獲取未指定的組件。對(duì)于分層 URI,原始路徑會(huì)根據(jù)基路徑解析,然后進(jìn)行規(guī)范化。例如:
docs/guide/collections/designfaq.html#28 (1)
針對(duì)基礎(chǔ) URI http://java.sun.com/j2se/1.3/ 是結(jié)果 URI
https://docs.oracle.com/javase/1.3/docs/guide/collections/designfaq.html#28
解析相對(duì) URI
../../../demo/jfc/SwingSet2/src/SwingSet2.java (2)
反過來,與這個(gè)結(jié)果相反,
http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java
支持對(duì)絕對(duì)和相對(duì) URI 的解析,以及在分層 URI 的情況下對(duì)絕對(duì)和相對(duì)路徑的解析。 根據(jù)任何其他 URI 解析 URI file:///~calendar 只會(huì)產(chǎn)生原始 URI,因?yàn)樗墙^對(duì)的。 將上面的相對(duì) URI (2) 與相對(duì)基本 URI (1) 解析會(huì)產(chǎn)生規(guī)范化但仍然是相對(duì)的 URI
demo/jfc/SwingSet2/src/SwingSet2.java
最后,相對(duì)化是解析的倒數(shù):對(duì)于任何兩個(gè)標(biāo)準(zhǔn)化的 URI u 和 v,
u.relativize(u.resolve(v)).equals(v) and u.resolve(u.relativize(v)).equals(v) .
在構(gòu)建包含 URI 的文檔時(shí),此操作通常很有用,這些 URI 必須盡可能與文檔的基本 URI 相關(guān)。 例如,將 URI 相對(duì)化
https://docs.oracle.com/javase/1.3/docs/guide/index.html
針對(duì)基礎(chǔ) URI
http://java.sun.com/j2se/1.3
產(chǎn)生相對(duì) URI docs/guide/index.html。 字符類別 RFC 2396 準(zhǔn)確地指定了在 URI 引用的各種組件中允許使用的字符。 以下類別(其中大部分來自該規(guī)范)用于描述這些約束:
所有合法 URI 字符的集合由未保留、保留、轉(zhuǎn)義和其他字符組成。
轉(zhuǎn)義八位組、引用、編碼和解碼 RFC 2396 允許轉(zhuǎn)義八位組出現(xiàn)在用戶信息、路徑、查詢和片段組件中。 轉(zhuǎn)義在 URI 中有兩個(gè)目的:
- 在要求 URI 嚴(yán)格遵守 RFC 2396 時(shí),對(duì)非 US-ASCII 字符進(jìn)行編碼,不包含任何其他字符。
- 引用組件中非法的字符。用戶信息、路徑、查詢和片段組件在哪些字符被視為合法和非法方面略有不同。
這些目的在此類中通過三個(gè)相關(guān)操作來實(shí)現(xiàn):
- 通過將字符替換為在 UTF-8 字符集中表示該字符的轉(zhuǎn)義八位字節(jié)序列來對(duì)字符進(jìn)行編碼。例如,歐元貨幣符號(hào) ('\u20AC') 編碼為“%E2%82%AC”。 (偏離 RFC 2396,它沒有指定任何特定的字符集。)
- 通過編碼簡(jiǎn)單地引用非法字符。例如,空格字符通過將其替換為“%20”來引用。 UTF-8 包含 US-ASCII,因此對(duì)于 US-ASCII 字符,此轉(zhuǎn)換具有 RFC 2396 所要求的效果。
- 通過將轉(zhuǎn)義的八位字節(jié)序列替換為它在 UTF-8 字符集中表示的字符序列來解碼它。 UTF-8 包含 US-ASCII,因此解碼具有取消引用任何引用的 US-ASCII 字符以及解碼任何編碼的非 US-ASCII 字符的效果。如果在解碼轉(zhuǎn)義的八位字節(jié)時(shí)發(fā)生解碼錯(cuò)誤,則錯(cuò)誤的八位字節(jié)將替換為 '\uFFFD',Unicode 替換字符。
這些操作在該類的構(gòu)造函數(shù)和方法中暴露如下:
- 單參數(shù)構(gòu)造函數(shù)要求在其參數(shù)中引用任何非法字符,并保留任何轉(zhuǎn)義的八位字節(jié)和其他存在的字符。
- 多參數(shù)構(gòu)造函數(shù)根據(jù)它們出現(xiàn)的組件的要求引用非法字符。這些構(gòu)造函數(shù)始終引用百分比字符 ('%')。保留任何其他字符。
- getRawUserInfo、getRawPath、getRawQuery、getRawFragment、getRawAuthority 和 getRawSchemeSpecificPart 方法以原始形式返回其對(duì)應(yīng)組件的值,而不解釋任何轉(zhuǎn)義的八位字節(jié)。這些方法返回的字符串可能同時(shí)包含轉(zhuǎn)義的八位字節(jié)和其他字符,并且不會(huì)包含任何非法字符。
- getUserInfo、getPath、getQuery、getFragment、getAuthority 和 getSchemeSpecificPart 方法解碼其相應(yīng)組件中的任何轉(zhuǎn)義八位字節(jié)。這些方法返回的字符串可能同時(shí)包含其他字符和非法字符,并且不會(huì)包含任何轉(zhuǎn)義的八位位組。
- toString 方法返回一個(gè)包含所有必要引號(hào)但可能包含其他字符的 URI 字符串。
- toASCIIString 方法返回不包含任何其他字符的完全引用和編碼的 URI 字符串。
身份 對(duì)于任何 URI u,總是這樣
new URI(u.toString()).equals(u) .
對(duì)于任何不包含冗余語法的 URI u,例如空權(quán)限前的兩個(gè)斜杠(如 file:///tmp/ 中)或主機(jī)名后的冒號(hào)但沒有端口(如 http://java.sun. com: ),并且除了必須引用的字符之外不編碼字符,以下標(biāo)識(shí)也成立:
new URI(u.getScheme(),
u.getSchemeSpecificPart(),
u.getFragment())
.equals(u)
在所有情況下,
new URI(u.getScheme(),
u.getUserInfo(), u.getAuthority(),
u.getPath(), u.getQuery(),
u.getFragment())
.equals(u)
如果你是分層的,并且
new URI(u.getScheme(),
u.getUserInfo(), u.getHost(), u.getPort(),
u.getPath(), u.getQuery(),
u.getFragment())
.equals(u)
如果 u 是分層的并且沒有權(quán)限或基于服務(wù)器的權(quán)限。 URI、URL 和 URN URI 是統(tǒng)一資源標(biāo)識(shí)符,而 URL 是統(tǒng)一資源定位符。因此,抽象地說,每個(gè) URL 都是一個(gè) URI,但并不是每個(gè) URI 都是一個(gè) URL。這是因?yàn)橛辛硪粋€(gè) URI 子類別,統(tǒng)一資源名稱 (URN),它命名資源但不指定如何定位它們。上面顯示的 mailto、news 和 isbn URI 是 URN 的示例。
URI 和 URL 之間的概念區(qū)別體現(xiàn)在此類和 URL 類之間的差異上。
此類的實(shí)例表示 RFC 2396 定義的句法意義上的 URI 引用。URI 可以是絕對(duì)的,也可以是相對(duì)的。 URI 字符串根據(jù)通用語法進(jìn)行解析,而不考慮它指定的方案(如果有)。不執(zhí)行主機(jī)查找(如果有的話),也不構(gòu)造依賴于方案的流處理程序。相等、散列和比較是根據(jù)實(shí)例的字符內(nèi)容嚴(yán)格定義的。換句話說,URI 實(shí)例只不過是一個(gè)結(jié)構(gòu)化的字符串,它支持比較、規(guī)范化、解析和相對(duì)化的語法、與方案無關(guān)的操作。
相比之下,URL 類的實(shí)例表示 URL 的句法組件以及訪問它所描述的資源所需的一些信息。 URL 必須是絕對(duì)的,也就是說,它必須始終指定一個(gè)方案。 URL 字符串根據(jù)其方案進(jìn)行解析。始終為 URL 建立流處理程序,實(shí)際上不可能為沒有可用處理程序的方案創(chuàng)建 URL 實(shí)例。相等和散列取決于主機(jī)的方案和 Internet 地址(如果有);比較沒有定義。換句話說,URL 是一個(gè)結(jié)構(gòu)化的字符串,它支持解析的語法操作以及查找主機(jī)和打開到指定資源的連接的網(wǎng)絡(luò) I/O 操作。
構(gòu)造函數(shù)摘要
| 構(gòu)造函數(shù) | 描述 |
|---|---|
| URI(String str) | 通過解析給定的字符串構(gòu)造一個(gè) URI。 |
| URI(String scheme, String ssp, String fragment) | 從給定的組件構(gòu)造一個(gè) URI。 |
| URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment) | 從給定的組件構(gòu)造一個(gè)分層的 URI。 |
| URI(String scheme, String host, String path, String fragment) | 從給定的組件構(gòu)造一個(gè)分層的 URI。 |
| URI(String scheme, String authority, String path, String query, String fragment) | 從給定的組件構(gòu)造一個(gè)分層的 URI。 |
方法總結(jié)
| 修飾符和類型 | 方法 | 描述 |
|---|---|---|
| int | compareTo(URI that) | 將此 URI 與另一個(gè)對(duì)象進(jìn)行比較,該對(duì)象必須是 URI。 |
| static URI | create(String str) | 通過解析給定的字符串創(chuàng)建一個(gè) URI。 |
| boolean | equals(Object ob) | 測(cè)試此 URI 是否與另一個(gè)對(duì)象相等。 |
| String | getAuthority() | 返回此 URI 的解碼權(quán)限組件。 |
| String | getFragment() | 返回此 URI 的解碼片段組件。 |
| String | getHost() | 返回此 URI 的主機(jī)組件。 |
| String | getPath() | 返回此 URI 的解碼路徑組件。 |
| int | getPort() | 返回此 URI 的端口號(hào)。 |
| String | getQuery() | 返回此 URI 的解碼查詢組件。 |
| String | getRawAuthority() | 返回此 URI 的原始權(quán)限組件。 |
| String | getRawFragment() | 返回此 URI 的原始片段組件。 |
| String | getRawPath() | 返回此 URI 的原始路徑組件。 |
| String | getRawQuery() | 返回此 URI 的原始查詢組件。 |
| String | getRawSchemeSpecificPart() | 返回此 URI 的原始方案特定部分。 |
| String | getRawUserInfo() | 返回此 URI 的原始用戶信息組件。 |
| String | getScheme() | 返回此 URI 的方案組件。 |
| String | getSchemeSpecificPart() | 返回此 URI 的已解碼方案特定部分。 |
| String | getUserInfo() | 返回此 URI 的已解碼用戶信息組件。 |
| int | hashCode() | 返回此 URI 的哈希碼值。 |
| boolean | isAbsolute() | 說明這個(gè)URI是否是絕對(duì)的。 |
| boolean | isOpaque() | 說明這個(gè)URI是否是不透明的。 |
| URI | normalize() | 將這個(gè)URI的路徑規(guī)范化。 |
| URI | parseServerAuthority() | 嘗試將此 URI 的權(quán)限組件(如果已定義)解析為用戶信息、主機(jī)和端口組件。 |
| URI | relativize(URI uri) | 將給定的 URI 與此 URI 相對(duì)化。 |
| URI | resolve(String str) | 通過解析給定的字符串構(gòu)造一個(gè)新的 URI,然后根據(jù)這個(gè) URI 解析它。 |
| URI | resolve(URI uri) | 根據(jù)此 URI 解析給定的 URI。 |
| String | toASCIIString() | 將此 URI 的內(nèi)容作為 US-ASCII 字符串返回。 |
| String | toString() | 將此 URI 的內(nèi)容作為字符串返回。 |
| URL | toURL() | 從此 URI 構(gòu)造一個(gè) URL。 |
| 從類 java.lang.Object 繼承的方法 |
|---|
| clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
構(gòu)造函數(shù)詳細(xì)信息
URI
public URI(String str) throws URISyntaxException
通過解析給定的字符串構(gòu)造一個(gè) URI。
此構(gòu)造函數(shù)完全按照 RFC 2396 附錄 A 中的語法指定的方式解析給定的字符串,但以下偏差除外:
- 允許空權(quán)限組件,只要其后跟非空路徑、查詢組件或片段組件。這允許解析諸如“file:///foo/bar”之類的 URI,這似乎是 RFC 2396 的意圖,盡管語法不允許這樣做。如果權(quán)限組件為空,則未定義用戶信息、主機(jī)和端口組件。
- 允許空的相對(duì)路徑;這似乎是 RFC 2396 的意圖,盡管語法不允許這樣做。這種偏差的主要后果是,諸如“#foo”之類的獨(dú)立片段被解析為具有空路徑和給定片段的相對(duì) URI,并且可以有效地針對(duì)基本 URI 進(jìn)行解析。
- 主機(jī)組件中的 IPv4 地址按照 RFC 2732 的規(guī)定進(jìn)行嚴(yán)格解析:點(diǎn)分四組地址的每個(gè)元素必須包含不超過三個(gè)十進(jìn)制數(shù)字。每個(gè)元素被進(jìn)一步限制為不大于 255。
- 僅包含單個(gè)域標(biāo)簽的主機(jī)組件中的主機(jī)名允許以字母數(shù)字字符開頭。這似乎是 RFC 2396 第 3.2.2 節(jié)的意圖,盡管語法不允許這樣做。這種偏差的結(jié)果是分層 URI 的權(quán)限組件(例如 s://123)將解析為基于服務(wù)器的權(quán)限。
- 主機(jī)組件允許使用 IPv6 地址。 IPv6 地址必須按照 RFC 2732 的規(guī)定括在方括號(hào)(“[”和“]”)中。IPv6 地址本身必須根據(jù) RFC 2373 進(jìn)行解析。IPv6 地址進(jìn)一步限制為描述不超過 16 個(gè)字節(jié)的地址信息, RFC 2373 中隱含但在語法中無法表達(dá)的約束。
- 只要 RFC 2396 允許轉(zhuǎn)義八位字節(jié),即在用戶信息、路徑、查詢和片段組件中,以及如果權(quán)限是基于注冊(cè)表的權(quán)限組件中,則允許其他類別中的字符。這允許 URI 包含 US-ASCII 字符集中以外的 Unicode 字符。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| str | 要解析為 URI 的字符串 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果 str 為空 |
| URISyntaxException | 如果給定的字符串違反了 RFC 2396,由上述偏差增強(qiáng) |
URI
public URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment) throws URISyntaxException
從給定的組件構(gòu)造一個(gè)分層的 URI。
如果給出了方案,則路徑(如果也給出)必須為空或以斜杠字符 ('/') 開頭。 否則,新 URI 的一個(gè)組成部分可以通過為相應(yīng)的參數(shù)傳遞 null 或在端口參數(shù)的情況下傳遞 -1 來保持未定義。
此構(gòu)造函數(shù)首先根據(jù) RFC 2396 第 5.2 節(jié)第 7 步中指定的規(guī)則從給定組件構(gòu)建 URI 字符串:
- 最初,結(jié)果字符串為空。
- 如果給出了一個(gè)方案,則將其附加到結(jié)果中,后跟一個(gè)冒號(hào)字符 (':')。
- 如果給出用戶信息、主機(jī)或端口,則附加字符串“//”。
- 如果給出了用戶信息,則附加它,后跟一個(gè)商業(yè)字符('@')。引用任何不在未保留、標(biāo)點(diǎn)、轉(zhuǎn)義或其他類別中的字符。
- 如果給定主機(jī),則附加它。如果主機(jī)是文字 IPv6 地址但未包含在方括號(hào)中('[' 和 ']'),則添加方括號(hào)。
- 如果給定端口號(hào),則附加一個(gè)冒號(hào)字符 (':'),然后是十進(jìn)制的端口號(hào)。
- 如果給出了路徑,則將其附加。任何不屬于未保留、標(biāo)點(diǎn)符號(hào)、轉(zhuǎn)義或其他類別的字符,并且不等于斜杠字符 ('/') 或商業(yè)字符 ('@'),都會(huì)被引用。
- 如果給出查詢,則附加一個(gè)問號(hào)字符 ('?'),然后是查詢。任何不是合法 URI 字符的字符都會(huì)被引用。
- 最后,如果給出一個(gè)片段,則附加一個(gè)哈希字符('#'),然后是片段。任何不是合法 URI 字符的字符都會(huì)被引用。
然后解析生成的 URI 字符串,就像調(diào)用 URI(java.lang.String) 構(gòu)造函數(shù),然后在結(jié)果上調(diào)用 parseServerAuthority() 方法一樣; 這可能會(huì)導(dǎo)致拋出 URISyntaxException。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| scheme | 方案名稱 |
| userInfo | 用戶名和授權(quán)信息 |
| host | 主機(jī)名 |
| port | 端口號(hào) |
| path | 路徑 |
| query | 查詢 |
| fragment | 碎片 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| URISyntaxException | 如果同時(shí)給出了方案和路徑,但路徑是相對(duì)的,如果從給定組件構(gòu)造的 URI 字符串違反 RFC 2396,或者如果字符串的權(quán)限組件存在但不能被解析為基于服務(wù)器的權(quán)限 |
URI
public URI(String scheme, String authority, String path, String query, String fragment) throws URISyntaxException
從給定的組件構(gòu)造一個(gè)分層的 URI。
如果給出了方案,則路徑(如果也給出)必須為空或以斜杠字符 ('/') 開頭。 否則,通過為相應(yīng)的參數(shù)傳遞 null 可能會(huì)使新 URI 的組件未定義。
此構(gòu)造函數(shù)首先根據(jù) RFC 2396 第 5.2 節(jié)第 7 步中指定的規(guī)則從給定組件構(gòu)建 URI 字符串:
- 最初,結(jié)果字符串為空。
- 如果給出了一個(gè)方案,則將其附加到結(jié)果中,后跟一個(gè)冒號(hào)字符 (':')。
- 如果給定了權(quán)限,則附加字符串“//”,然后是權(quán)限。如果授權(quán)包含文字 IPv6 地址,則地址必須括在方括號(hào)中('[' 和 ']')。任何不屬于未保留、標(biāo)點(diǎn)、轉(zhuǎn)義或其他類別的字符,并且不等于商業(yè)字符 ('@'),都會(huì)被引用。
- 如果給出了路徑,則附加它。任何不屬于未保留、標(biāo)點(diǎn)符號(hào)、轉(zhuǎn)義或其他類別的字符,并且不等于斜杠字符 ('/') 或商業(yè)字符 ('@'),都會(huì)被引用。
- 如果給出查詢,則附加一個(gè)問號(hào)字符 ('?'),然后是查詢。任何不是合法 URI 字符的字符都會(huì)被引用。
- 最后,如果給出一個(gè)片段,則附加一個(gè)哈希字符('#'),然后是片段。任何不是合法 URI 字符的字符都會(huì)被引用。
然后解析生成的 URI 字符串,就像調(diào)用 URI(java.lang.String) 構(gòu)造函數(shù),然后在結(jié)果上調(diào)用 parseServerAuthority() 方法一樣; 這可能會(huì)導(dǎo)致拋出 URISyntaxException。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| scheme | 方案名稱 |
| authority | 授權(quán) |
| path | 路徑 |
| query | 查詢 |
| fragment | 碎片 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| URISyntaxException | 如果同時(shí)給出了方案和路徑,但路徑是相對(duì)的,如果從給定組件構(gòu)造的 URI 字符串違反 RFC 2396,或者如果字符串的權(quán)限組件存在但不能被解析為基于服務(wù)器的權(quán)限 |
URI
public URI(String scheme, String host, String path, String fragment) throws URISyntaxException
從給定的組件構(gòu)造一個(gè)分層的 URI。
通過傳遞 null 可以使組件保持未定義。
這個(gè)便利構(gòu)造函數(shù)就像通過調(diào)用七參數(shù)構(gòu)造函數(shù)一樣工作,如下所示:
new URI(scheme, null, host, -1, path, null, fragment);
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| scheme | 方案名稱 |
| host | 主機(jī)名 |
| path | 路徑 |
| fragment | 碎片 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| URISyntaxException | 如果從給定組件構(gòu)造的 URI 字符串違反 RFC 2396 |
URI
public URI(String scheme, String ssp, String fragment) throws URISyntaxException
從給定的組件構(gòu)造一個(gè) URI。
通過傳遞 null 可以使組件保持未定義。
此構(gòu)造函數(shù)首先使用給定的組件構(gòu)建一個(gè)字符串形式的 URI,如下所示:
- 最初,結(jié)果字符串為空。
- 如果給出了一個(gè)方案,則將其附加到結(jié)果中,后跟一個(gè)冒號(hào)字符 (':')。
- 如果給出了特定于方案的部分,則將其附加。 任何不是合法 URI 字符的字符都會(huì)被引用。
- 最后,如果給出一個(gè)片段,則將一個(gè)哈希字符 ('#') 附加到字符串,然后是片段。 任何不是合法 URI 字符的字符都會(huì)被引用。
然后解析生成的 URI 字符串,以創(chuàng)建新的 URI 實(shí)例,就像調(diào)用 URI(java.lang.String) 構(gòu)造函數(shù)一樣; 這可能會(huì)導(dǎo)致拋出 URISyntaxException。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| scheme | 方案名稱 |
| ssp | 方案特定部分 |
| fragment | 碎片 |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| URISyntaxException | 如果從給定組件構(gòu)造的 URI 字符串違反 RFC 2396 |
方法詳情
create
public static URI create(String str)
通過解析給定的字符串創(chuàng)建一個(gè) URI。
這個(gè)方便的工廠方法就像調(diào)用 URI(java.lang.String) 構(gòu)造函數(shù)一樣工作; 構(gòu)造函數(shù)拋出的任何 URISyntaxException 都會(huì)被捕獲并包裝在一個(gè)新的 IllegalArgumentException 對(duì)象中,然后拋出該對(duì)象。
提供此方法用于已知給定字符串是合法 URI 的情況,例如在程序中聲明的 URI 常量,因此如果字符串不這樣解析將被視為編程錯(cuò)誤。 直接拋出 URISyntaxException 的構(gòu)造函數(shù)應(yīng)該用于從用戶輸入或其他可能容易出錯(cuò)的源構(gòu)造 URI 的情況。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| str | 要解析為 URI 的字符串 |
返回:
新的 URI
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果 str 為空 |
| IllegalArgumentException | 如果給定的字符串違反 RFC 2396 |
parseServerAuthority
public URI parseServerAuthority() throws URISyntaxException
嘗試將此 URI 的權(quán)限組件(如果已定義)解析為用戶信息、主機(jī)和端口組件。
如果這個(gè) URI 的權(quán)限組件已經(jīng)被識(shí)別為基于服務(wù)器的,那么它已經(jīng)被解析為用戶信息、主機(jī)和端口組件。在這種情況下,或者如果此 URI 沒有權(quán)限組件,則此方法僅返回此 URI。
否則,此方法會(huì)再次嘗試將權(quán)限組件解析為用戶信息、主機(jī)和端口組件,并拋出異常,說明無法以這種方式解析權(quán)限組件的原因。
之所以提供此方法,是因?yàn)?RFC 2396 中指定的通用 URI 語法不能始終區(qū)分格式錯(cuò)誤的基于服務(wù)器的權(quán)限和合法的基于注冊(cè)表的權(quán)限。因此,它必須將前者的某些實(shí)例視為后者的實(shí)例。例如,URI 字符串“//foo:bar”中的權(quán)限組件不是基于服務(wù)器的合法權(quán)限,但作為基于注冊(cè)表的權(quán)限是合法的。
在許多常見情況下,例如當(dāng)工作 URI 已知為 URN 或 URL 時(shí),所使用的分層 URI 將始終基于服務(wù)器。因此,它們必須按原樣解析或視為錯(cuò)誤。在這些情況下,聲明如
URI u = new URI(str).parseServerAuthority();
可用于確保 u 始終引用一個(gè) URI,如果它具有權(quán)限組件,則具有基于服務(wù)器的權(quán)限以及適當(dāng)?shù)挠脩粜畔ⅰ⒅鳈C(jī)和端口組件。 調(diào)用此方法還確保如果無法以這種方式解析權(quán)限,則可以根據(jù)拋出的異常發(fā)出適當(dāng)?shù)脑\斷消息。
返回:
一個(gè)URI,其權(quán)限字段已被解析為基于服務(wù)器的權(quán)限
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| URISyntaxException | 如果此 URI 的權(quán)限組件已定義但不能根據(jù) RFC 2396 解析為基于服務(wù)器的權(quán)限 |
normalize
public URI normalize()
規(guī)范化此 URI 的路徑。
如果這個(gè) URI 是不透明的,或者如果它的路徑已經(jīng)是正常的形式,那么這個(gè) URI 被返回。 否則,將構(gòu)造一個(gè)與此 URI 相同的新 URI,除了它的路徑是通過以符合 RFC 2396,第 5.2 節(jié),第 6 步,子步驟 c 到 f 的方式規(guī)范化此 URI 的路徑來計(jì)算的; 那是:
- 全部“.” 段被刪除。
- 如果“..”段前面有一個(gè)非“..”段,則這兩個(gè)段都被刪除。 重復(fù)此步驟,直到不再適用。
- 如果路徑是相對(duì)的,并且如果它的第一段包含一個(gè)冒號(hào)字符(':'),那么一個(gè)“.” 段是前置的。 這可以防止具有諸如“a:b/c/d”之類路徑的相對(duì) URI 稍后被重新解析為具有“a”方案和“b/c/d”方案特定部分的不透明 URI . (偏離 RFC 2396)
如果在它們之前沒有足夠的非“..”段以允許將其刪除,則規(guī)范化路徑將從一個(gè)或多個(gè)“..”段開始。 規(guī)范化路徑將以“?!遍_頭。 如果在上面的步驟 3 中插入了一個(gè)片段。 否則,規(guī)范化路徑將不包含任何“?!?或“..”段。
返回:
與此 URI 等效的 URI,但其路徑為正常格式
resolve
public URI resolve(URI uri)
根據(jù)此 URI 解析給定的 URI。
如果給定的 URI 已經(jīng)是絕對(duì)的,或者如果這個(gè) URI 是不透明的,則返回給定的 URI。
如果給定 URI 的片段組件已定義,其路徑組件為空,并且其方案、權(quán)限和查詢組件未定義,則返回具有給定片段但所有其他組件與該 URI 相同的 URI。 這允許表示獨(dú)立片段引用的 URI,例如“#foo”,可以有效地針對(duì)基本 URI 進(jìn)行解析。
否則,此方法以與 RFC 2396 第 5.2 節(jié)一致的方式構(gòu)造新的分層 URI; 那是:
- 使用此 URI 的方案以及給定 URI 的查詢和片段組件構(gòu)造一個(gè)新的 URI。
- 如果給定 URI 具有權(quán)限組件,則新 URI 的權(quán)限和路徑取自給定 URI。
- 否則,從該 URI 復(fù)制新 URI 的權(quán)限組件,其路徑計(jì)算如下:
- 如果給定 URI 的路徑是絕對(duì)路徑,則新 URI 的路徑取自給定 URI。
- 否則,給定 URI 的路徑是相對(duì)的,因此新 URI 的路徑是通過根據(jù)該 URI 的路徑解析給定 URI 的路徑來計(jì)算的。 這是通過將此 URI 路徑的最后一段(如果有的話)與給定 URI 的路徑連接起來,然后像調(diào)用 normalize 方法一樣對(duì)結(jié)果進(jìn)行規(guī)范化來完成的。
此方法的結(jié)果是絕對(duì)的,當(dāng)且僅當(dāng)此 URI 是絕對(duì)的或給定的 URI 是絕對(duì)的。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| uri | 要針對(duì)此 URI 解析的 URI |
返回:
生成的 URI
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果 uri 為空 |
resolve
public URI resolve(String str)
通過解析給定的字符串構(gòu)造一個(gè)新的 URI,然后根據(jù)這個(gè) URI 解析它。
這種便捷方法的工作方式就像調(diào)用它等同于評(píng)估表達(dá)式 resolve(URI.create(str))。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| str | 要解析為 URI 的字符串 |
返回:
生成的 URI
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果 str 為空 |
| IllegalArgumentException | 如果給定的字符串違反 RFC 2396 |
relativize
public URI relativize(URI uri)
將給定的 URI 與此 URI 相對(duì)化。
給定 URI 與此 URI 的相對(duì)化計(jì)算如下:
- 如果此 URI 或給定 URI 不透明,或者如果兩個(gè) URI 的方案和權(quán)限組件不相同,或者如果此 URI 的路徑不是給定 URI 路徑的前綴,則給定 返回 URI。
- 否則,使用從給定 URI 獲取的查詢和片段組件以及通過從給定 URI 路徑的開頭刪除此 URI 路徑來計(jì)算的路徑組件來構(gòu)造新的相對(duì)分層 URI。
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| uri | 要針對(duì)此 URI 進(jìn)行相對(duì)化的 URI |
返回:
生成的 URI
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| NullPointerException | 如果 uri 為空 |
toURL
public URL toURL() throws MalformedURLException
從此 URI 構(gòu)造一個(gè) URL。
這種便捷方法的工作方式就好像調(diào)用它等同于在首先檢查此 URI 是否為絕對(duì)值之后評(píng)估表達(dá)式 new URL(this.toString())。
返回:
從此 URI 構(gòu)造的 URL
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| IllegalArgumentException | 如果此 URL 不是絕對(duì)的 |
| MalformedURLException | 如果找不到 URL 的協(xié)議處理程序,或者在構(gòu)造 URL 時(shí)發(fā)生了其他錯(cuò)誤 |
getScheme
public String getScheme()
返回此 URI 的方案組件。
URI 的方案組件(如果已定義)僅包含字母數(shù)字類別和字符串“-.+”中的字符。 方案總是以字母字符開頭。
URI 的方案組件不能包含轉(zhuǎn)義的八位字節(jié),因此此方法不執(zhí)行任何解碼。
返回:
此 URI 的方案組件,如果方案未定義,則為 null
isAbsolute
public boolean isAbsolute()
判斷這個(gè) URI 是否是絕對(duì)的。
當(dāng)且僅當(dāng)它具有方案組件時(shí),URI 才是絕對(duì)的。
返回:
當(dāng)且僅當(dāng)此 URI 是絕對(duì)的,則為 true
isOpaque
public boolean isOpaque()
判斷此 URI 是否不透明。
當(dāng)且僅當(dāng) URI 是絕對(duì)的并且其特定于方案的部分不以斜杠字符 ('/') 開頭時(shí),URI 才是不透明的。 一個(gè)不透明的 URI 有一個(gè)方案,一個(gè)特定于方案的部分,可能還有一個(gè)片段; 所有其他組件都未定義。
返回:
當(dāng)且僅當(dāng)此 URI 不透明時(shí)才為 true
getRawSchemeSpecificPart
public String getRawSchemeSpecificPart()
返回此 URI 的原始方案特定部分。 特定于方案的部分永遠(yuǎn)不會(huì)未定義,盡管它可能為空。
URI 的特定于方案的部分僅包含合法的 URI 字符。
返回:
此 URI 的原始方案特定部分(從不為空)
getSchemeSpecificPart
public String getSchemeSpecificPart()
返回此 URI 的已解碼方案特定部分。
此方法返回的字符串與 getRawSchemeSpecificPart 方法返回的字符串相同,但所有轉(zhuǎn)義八位字節(jié)序列均已解碼。
返回:
此 URI 的解碼方案特定部分(從不為空)
getRawAuthority
public String getRawAuthority()
返回此 URI 的原始權(quán)限組件。
URI 的權(quán)限組件(如果已定義)僅包含商業(yè)字符 ('@') 以及未保留、標(biāo)點(diǎn)、轉(zhuǎn)義和其他類別中的字符。 如果權(quán)限是基于服務(wù)器的,則進(jìn)一步限制它具有有效的用戶信息、主機(jī)和端口組件。
返回:
此 URI 的原始權(quán)限組件,如果權(quán)限未定義,則為 null
getAuthority
public String getAuthority()
返回此 URI 的解碼權(quán)限組件。
此方法返回的字符串與 getRawAuthority 方法返回的字符串相同,但所有轉(zhuǎn)義八位字節(jié)序列均已解碼。
返回:
此 URI 的已解碼權(quán)限組件,如果權(quán)限未定義,則為 null
getRawUserInfo
public String getRawUserInfo()
返回此 URI 的原始用戶信息組件。
URI 的用戶信息組件(如果已定義)僅包含未保留、標(biāo)點(diǎn)、轉(zhuǎn)義和其他類別中的字符。
返回:
此 URI 的原始用戶信息組件,如果用戶信息未定義,則為 null
getUserInfo
public String getUserInfo()
返回此 URI 的已解碼用戶信息組件。
此方法返回的字符串與 getRawUserInfo 方法返回的字符串相同,只是所有轉(zhuǎn)義的八位字節(jié)序列都被解碼。
返回:
此 URI 的已解碼用戶信息組件,如果用戶信息未定義,則為 null
getHost
public String getHost()
返回此 URI 的主機(jī)組件。
URI 的主機(jī)組件(如果已定義)將具有以下形式之一:
- 由一個(gè)或多個(gè)標(biāo)簽組成的域名,這些標(biāo)簽由句點(diǎn)字符 ('.') 分隔,可選地后跟一個(gè)句點(diǎn)字符。 每個(gè)標(biāo)簽都由字母數(shù)字字符和連字符 ('-') 組成,但連字符永遠(yuǎn)不會(huì)作為標(biāo)簽中的第一個(gè)或最后一個(gè)字符出現(xiàn)。 由兩個(gè)或多個(gè)標(biāo)簽組成的域名的最右側(cè)標(biāo)簽以字母字符開頭。
- digit+.digit+.digit+.digit+ 形式的點(diǎn)分四線 IPv4 地址,其中沒有數(shù)字序列長(zhǎng)于三個(gè)字符,并且沒有序列的值大于 255。
- 用方括號(hào)('[' 和 ']')括起來的 IPv6 地址,由十六進(jìn)制數(shù)字、冒號(hào)字符(':')和可能嵌入的 IPv4 地址組成。 IPv6 地址的完整語法在 RFC 2373:IPv6 Addressing Architecture 中指定。
URI 的主機(jī)組件不能包含轉(zhuǎn)義的八位字節(jié),因此此方法不執(zhí)行任何解碼。
返回:
此 URI 的主機(jī)組件,如果主機(jī)未定義,則為 null
getPort
public int getPort()
返回此 URI 的端口號(hào)。
URI 的端口組件(如果已定義)是一個(gè)非負(fù)整數(shù)。
返回:
此 URI 的端口組件,如果端口未定義,則為 -1
getRawPath
public String getRawPath()
返回此 URI 的原始路徑組件。
URI 的路徑組件(如果已定義)僅包含斜杠字符 ('/')、商業(yè)字符 ('@') 以及未保留、標(biāo)點(diǎn)、轉(zhuǎn)義和其他類別中的字符。
返回:
此 URI 的路徑組件,如果路徑未定義,則為 null
getPath
public String getPath()
返回此 URI 的解碼路徑組件。
此方法返回的字符串與 getRawPath 方法返回的字符串相同,只是所有轉(zhuǎn)義八位字節(jié)序列都被解碼。
返回:
此 URI 的解碼路徑組件,如果路徑未定義,則為 null
getRawQuery
public String getRawQuery()
返回此 URI 的原始查詢組件。
URI 的查詢組件(如果已定義)僅包含合法的 URI 字符。
返回:
此 URI 的原始查詢組件,如果查詢未定義,則為 null
getQuery
public String getQuery()
返回此 URI 的解碼查詢組件。
此方法返回的字符串與 getRawQuery 方法返回的字符串相同,但所有轉(zhuǎn)義八位位組序列均已解碼。
返回:
此 URI 的已解碼查詢組件,如果查詢未定義,則為 null
getRawFragment
public String getRawFragment()
返回此 URI 的原始片段組件。
URI 的片段組件(如果已定義)僅包含合法的 URI 字符。
返回:
此 URI 的原始片段組件,如果片段未定義,則為 null
getFragment
public String getFragment()
返回此 URI 的解碼片段組件。
此方法返回的字符串與 getRawFragment 方法返回的字符串相同,但所有轉(zhuǎn)義八位字節(jié)序列均已解碼。
返回:
此 URI 的已解碼片段組件,如果片段未定義,則為 null
equals
public boolean equals(Object ob)
測(cè)試此 URI 是否與另一個(gè)對(duì)象相等。
如果給定對(duì)象不是 URI,則此方法立即返回 false。
要使兩個(gè) URI 被視為相等,要求兩者都是不透明的或都是分層的。它們的方案必須要么都是未定義的,要么是相等的,不考慮大小寫。它們的片段必須要么都是未定義的,要么是相等的。
要使兩個(gè)不透明的 URI 被視為相等,它們的特定于方案的部分必須相等。
對(duì)于被認(rèn)為相等的兩個(gè)分層 URI,它們的路徑必須相等,并且它們的查詢必須要么都未定義,要么相等。他們的權(quán)限必須要么都是未定義的,要么都是基于注冊(cè)表的,或者都是基于服務(wù)器的。如果它們的權(quán)限被定義并且基于注冊(cè),那么它們必須是平等的。如果它們的權(quán)限被定義并且是基于服務(wù)器的,那么它們的主機(jī)必須相同而不考慮大小寫,它們的端口號(hào)必須相同,并且它們的用戶信息組件必須相同。
在測(cè)試兩個(gè) URI 的用戶信息、路徑、查詢、片段、權(quán)限或特定于方案的部分是否相等時(shí),將比較這些組件的原始形式而不是編碼形式,并且比較轉(zhuǎn)義八位字節(jié)的十六進(jìn)制數(shù)字而不考慮案件。
此方法滿足 Object.equals 方法的一般約定。
覆蓋:
類 Object 中的等于
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| ob | 此對(duì)象要與之比較的對(duì)象 |
返回:
當(dāng)且僅當(dāng)給定對(duì)象是與此 URI 相同的 URI 時(shí),才為 true
hashCode
public int hashCode()
返回此 URI 的哈希碼值。 哈希碼基于 URI 的所有組件,并滿足 Object.hashCode 方法的一般約定。
覆蓋:
類 Object 中的 hashCode
返回:
此 URI 的哈希碼值
compareTo
public int compareTo(URI that)
將此 URI 與另一個(gè)對(duì)象進(jìn)行比較,該對(duì)象必須是 URI。
在比較兩個(gè) URI 的對(duì)應(yīng)組件時(shí),如果一個(gè)組件未定義但另一個(gè)已定義,則認(rèn)為第一個(gè)小于第二個(gè)。 除非另有說明,否則字符串組件將根據(jù) String.compareTo 方法定義的自然、區(qū)分大小寫的順序進(jìn)行排序。 通過比較它們的原始形式而不是它們的編碼形式來比較受編碼的字符串組件。
URI 的順序定義如下:
- 兩個(gè)具有不同方案的 URI 根據(jù)它們方案的順序排序,不考慮大小寫。
- 分層 URI 被認(rèn)為小于具有相同方案的不透明 URI。
- 具有相同方案的兩個(gè)不透明 URI 根據(jù)其方案特定部分的順序進(jìn)行排序。
- 具有相同方案和方案特定部分的兩個(gè)不透明 URI 根據(jù)其片段的順序進(jìn)行排序。
- 兩個(gè)具有相同方案的分層 URI 根據(jù)其權(quán)限組件的順序進(jìn)行排序:
- 如果兩個(gè)權(quán)限組件都是基于服務(wù)器的,那么 URI 會(huì)根據(jù)它們的用戶信息組件進(jìn)行排序; 如果這些組件相同,則 URI 將根據(jù)其主機(jī)的順序進(jìn)行排序,而不考慮大小寫; 如果主機(jī)相同,則 URI 將根據(jù)其端口的順序進(jìn)行排序。
- 如果一個(gè)或兩個(gè)權(quán)限組件是基于注冊(cè)表的,則 URI 根據(jù)其權(quán)限組件的順序進(jìn)行排序。
- 最后,將具有相同方案和權(quán)限組件的兩個(gè)分層URI按照路徑的順序進(jìn)行排序; 如果它們的路徑相同,則根據(jù)查詢的順序?qū)λ鼈冞M(jìn)行排序; 如果查詢相同,則根據(jù)其片段的順序?qū)ζ溥M(jìn)行排序。
此方法滿足 Comparable.compareTo 方法的一般約定。
指定者:
接口 ComparableURI 中的 compareTo
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| that | 此 URI 要與之比較的對(duì)象 |
返回:
負(fù)整數(shù)、零或正整數(shù),因?yàn)榇?URI 小于、等于或大于給定 URI
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| ClassCastException | 如果給定對(duì)象不是 URI |
toString
public String toString()
將此 URI 的內(nèi)容作為字符串返回。
如果此 URI 是通過調(diào)用此類中的構(gòu)造函數(shù)之一創(chuàng)建的,則返回與原始輸入字符串或根據(jù)最初給定組件計(jì)算的字符串等效的字符串(視情況而定)。 否則,此 URI 是通過規(guī)范化、解析或相對(duì)化創(chuàng)建的,因此根據(jù) RFC 2396 第 5.2 節(jié)第 7 步中指定的規(guī)則從此 URI 的組件構(gòu)造一個(gè)字符串。
覆蓋:
類 Object 中的 toString
返回:
此 URI 的字符串形式
toASCIIString
public String toASCIIString()
將此 URI 的內(nèi)容作為 US-ASCII 字符串返回。
如果此 URI 不包含其他類別中的任何字符,則調(diào)用此方法將返回與調(diào)用 toString 方法相同的值。 否則,此方法就像通過調(diào)用該方法然后對(duì)結(jié)果進(jìn)行編碼一樣工作。
返回:
此 URI 的字符串形式,根據(jù)需要進(jìn)行編碼,使其僅包含 US-ASCII 字符集中的字符
新聞名稱:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OSURI
網(wǎng)站鏈接:http://m.fisionsoft.com.cn/article/dpcicgg.html


咨詢
建站咨詢
