欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 必知必會的 URL 和 URLConnection使用

 更新時間:2019年10月24日 09:58:43   作者:沉默王二  
這篇文章主要介紹了Java 必知必會的 URL 和 URLConnection使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

java.net.URL 類將 URL 地址進行了封裝,并提供了解析 URL 地址的基本方法,比如獲取 URL 的主機名和端口號。

java.net.URLConnection 則代表了應用程序和 URL 之間的通信鏈接,可用于讀取和寫入此 URL 引用的資源。

URLConnection 看起來只是比 URL 多了一個 Connection,它們之間的關系也僅限于此嗎?

01、什么是 URL

為了搞清楚什么是 URL,需要引入另外兩個概念 URI 和 URN。

什么鬼,URL 都沒搞清楚,又來兩個搞不清楚的?別擔心,我能像變了魔法一樣讓大家把三個都搞清楚。

  • URI = Universal Resource Identifier,中文釋義為統(tǒng)一資源標志符
  • URL = Universal Resource Locator,中文釋義為統(tǒng)一資源定位符
  • URN = Universal Resource Name,中文釋義為統(tǒng)一資源名稱

它們之間的關系如下圖所示:

這圖啥意思啊,怎么辦呢?張小敬有問題就去問葛佬,咱不會就去問“維基百科”啊。

URI 可以分為 URL 和 URN,或者是 URL 和 URN 的結合體(同時具備 Locator 和 Name)。URN 就好像一個人的名字,URL 就像一個人的地址。換句話說:URN 確定了身份,URL 提供了找到它的方式。

概念清晰了吧?URI 是一個純粹的句法結構,用于指定標識 Web 資源的字符串的各個不同部分。URL 是 URI 的一個特例,包含了定位 Web 資源的足夠多的信息。URI 是統(tǒng)一資源標識符,而 URL 是統(tǒng)一資源定位符。URL 是 URI 的一種,比如:http://www.itmind.net/。但不是所有的 URI 都是 URL,因為 URI 可能包括一個子集,即統(tǒng)一資源名稱 (URN,命名了資源但不指定如何定位資源),比如說:mailto:qing_gee@163.com。

吧啦吧啦說這么多挺累的,來一發(fā)實例吧,用于獲取 URL 的主機名和端口號。

URL url = new URL("http://www.itmind.net/category/payment-selection/zhishixingqiu-jingxuan/");

System.out.println("host: " + url.getHost());
System.out.println("port: " + url.getPort());
System.out.println("uri_path: " + url.getPath());

// 輸出
// host: www.itmind.net
// port: -1
// uri_path: /category/payment-selection/zhishixingqiu-jingxuan/

1)創(chuàng)建 java.net.URL 對象的方法非常簡單,只需要一行代碼。

URL url = new URL(URL地址);

URL 對象是不可變的,因為 URL 類是 final 類型的,這樣的好處就是保證它是"線程安全"的。

2)有了 java.net.URL 對象后,就可以獲取 URL 相關的主機名、端口、路徑等等。

url.getHost()
url.getPort()
url.getPath()

02、什么是 URLConnection

URLConnection 是一個抽象類,代表應用程序和 URL 之間的通信鏈接。它的實例可用于讀取和寫入此 URL 引用的資源。該類提供了比 Socket 類更易于使用、更高級的網絡連接抽象。

怎么獲取 URLConnection 對象呢?通過 URL 對象的 openConnection() 方法,示例如下。

URL url = new URL("http://www.itmind.net");
URLConnection connection = url.openConnection();

如果 URL 協議為 HTTP 的話,返回的連接為 URLConnection 的子類 HttpURLConnection。

有了 URLConnection 對象后,可以通過 getInputStream() 返回一個 InputStream,由此讀取 URL 所引用的資源數據(如果讀取 ASCII 文本則為 ASCII;如果讀取 HTML 文件則為原始 HTML,如果讀取圖像文件則為二進制圖片數據等)。

我們來嘗試讀取一下小白學堂首頁的內容,代碼示例如下。

URL url = new URL("http://www.itmind.net");
URLConnection connection = url.openConnection();

try (InputStream in = connection.getInputStream();) {

 ByteArrayOutputStream output = new ByteArrayOutputStream();
 byte[] buffer = new byte[1024];
 int len = -1;
 while ((len = in.read(buffer)) != -1) {
 output.write(buffer, 0, len);
 }

 System.out.println(new String(output.toByteArray()));

} catch (IOException e) {
 e.printStackTrace();
}

可以使用 try-with-resource 獲取 InputStream,該類實現了 AutoCloseable 接口,可以在內容讀取完畢后自動關閉輸入流。

打印的內容如下圖所示(部分):

 

如果你想讀取某個 URL 的內容,上述方法是一個不錯的方案,趕快去試試吧!

03、URL 和 URLConnection 的不同

URL 和 URLConnection 最大的不同在于:

  • URLConnection 提供了對 HTTP 頭部的訪問;
  • URLConnection 可以配置發(fā)送給某個 URL 的請求參數;
  • URLConnection 不僅可以讀取 URL 定位的資源,還可以向其寫入數據。

獲取 HTTP 頭部的方法有以下一些:

  • getContentType,返回 Content-type 頭字段的值,即數據的 MIME 內容類型。若類型不可用,則返回 null。如果內容類型是文本,則 Content-type 首部可能會包含一個標識內容編碼方式的字符集,例如:Content-type:text/html; charset=UTF-8
  • getContentLength(),返回 Content-length 頭字段的值,即內容的字節(jié)數。
  • getContentEncoding(),返回 Content-encoding 頭字段的值,即內容的編碼方式(不同于字符編碼方式),例如:x-gzip。
  • getDate(),返回 date 頭字段的值,即請求的發(fā)送時間。
  • getExpiration(),返回 expires(過期時間) 頭字段的值。如果返回 0,表示不過期,永遠緩存。
  • getLastModified(),返回 last-modified(上次修改日期) 頭字段的值。

代碼示例如下。

URL url = new URL("http://www.itmind.net");
URLConnection connection = url.openConnection();
System.out.println(connection.getContentType());
System.out.println(connection.getContentLength());
System.out.println(connection.getContentEncoding());
System.out.println(connection.getDate());
System.out.println(connection.getExpiration());
System.out.println(connection.getLastModified());

// 輸出
// text/html; charset=UTF-8
// -1
// null
// 1566886980000
// 0
// 0

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java文件操作之按行讀取文件和遍歷目錄的方法

    Java文件操作之按行讀取文件和遍歷目錄的方法

    這篇文章主要介紹了Java文件操作之按行讀取文件和遞歸遍歷目錄的方法,遍歷目錄文中分別舉了遞歸和非遞歸的例子,需要的朋友可以參考下
    2016-03-03
  • Java中Array、List、ArrayList的區(qū)別及說明

    Java中Array、List、ArrayList的區(qū)別及說明

    這篇文章主要介紹了Java中Array、List、ArrayList的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java異常的處理機制

    Java異常的處理機制

    這篇文章主要介紹了Java異常的處理機制,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • @CacheEvict中的allEntries與beforeInvocation的區(qū)別說明

    @CacheEvict中的allEntries與beforeInvocation的區(qū)別說明

    這篇文章主要介紹了@CacheEvict中的allEntries與beforeInvocation的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot四大神器之Auto onfiguration的使用

    SpringBoot四大神器之Auto onfiguration的使用

    本文主要介紹了SpringBoot四大神器之Auto Configuration,springboot auto configuration的本質就是自動配置spring的各種bean。感興趣的可以了解一下
    2021-10-10
  • 使用Jenkins來構建SVN+Maven項目的實現

    使用Jenkins來構建SVN+Maven項目的實現

    這篇文章主要介紹了使用Jenkins來構建SVN+Maven項目的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java判斷字符串回文的代碼實例

    Java判斷字符串回文的代碼實例

    在本篇文章里小編給各位整理的是一篇關于Java判斷字符串回文的代碼實例內容,需要的朋友們可以跟著學習參考下。
    2020-02-02
  • springboot實現注冊加密與登錄解密功能(demo)

    springboot實現注冊加密與登錄解密功能(demo)

    這篇文章主要介紹了springboot實現注冊的加密與登錄的解密功能,本文通過demo實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • java連接數據庫的5種方式解讀

    java連接數據庫的5種方式解讀

    這篇文章主要介紹了java連接數據庫的5種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教<BR>
    2024-04-04
  • Java ThreadLocal的設計理念與作用

    Java ThreadLocal的設計理念與作用

    這篇文章主要介紹了Java ThreadLocal的設計理念與作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03

最新評論