《Java網(wǎng)絡(luò)編程》讀書筆記

最近讀完《Java網(wǎng)絡(luò)編程》(第四版),有必要記錄下,還是國(guó)外作者給力,內(nèi)容相當(dāng)翔實(shí)而且核心點(diǎn)分析到位,沒有太多余的內(nèi)容,更沒有不必要的炫技。內(nèi)容主要是介紹java的網(wǎng)絡(luò)API的使用,基本可以滿足絕大部分的網(wǎng)絡(luò)應(yīng)用場(chǎng)景。由于對(duì)底層通訊做了封裝,所以使用起來難度不大,效率也基本能滿足需求,有計(jì)劃應(yīng)用再公司的一些業(yè)務(wù)場(chǎng)景中。

大綱如下:


Java網(wǎng)絡(luò)編程.png

一、流

網(wǎng)絡(luò)程序絕大部分的工作都是處理輸入和輸出:將數(shù)據(jù)字節(jié)從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)。
輸入流讀取數(shù)據(jù)(read),輸出流寫入數(shù)據(jù)(write)
Java7引入了“帶資源的try”,可以這樣編寫流操作代碼

try (OutputStream out = new FileOutputStream("text.txt")) {
       // TO-DO
} catch (IOException e) {
       // 異常處理
}

過濾器流(filter)過濾器可以在讀寫時(shí)修改數(shù)據(jù)(例如,通過加密或壓縮)或者只是提供額外的方法,將讀寫的數(shù)據(jù)轉(zhuǎn)換為其他格式。
閱讀器(reader)和書寫器(writer)可以鏈接到輸入流和輸出流上,允許讀寫文本(即字符)而不是字節(jié)。只要正確地使用,閱讀器和書寫器可以處理很多字符編碼,包括多字節(jié)字符集。

二、線程

線程是一個(gè)相當(dāng)大的范疇,這里只是簡(jiǎn)單講解了線程的基本概念以及使用方法,詳情查閱相關(guān)線程技術(shù)資料。
獲得線程返回值:
1、通過runnable的callback
2、通過ExcutorService的submit方法執(zhí)行Callable對(duì)象獲得Future,再從Future獲得內(nèi)容返回值

四、Internet地址

InternetAddress對(duì)象

InetAddress address = InetAddress.getByName("www.baidu.com");
System.out.println(address);

NetworkInterface類
表示一個(gè)本地IP地址

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
       NetworkInterface ni = interfaces.nextElement();
       System.out.println(ni);
}

五、URL和URI

URI:統(tǒng)一資源標(biāo)識(shí)符
URL:是一個(gè)URI,還為資源指定了一個(gè)網(wǎng)絡(luò)地址

URL類

URL u = new URL("www.baidu.com")
u.openStream
u.openConnection
...
...

URI類

URI u = new URI("tel:+8618620000000")
URI u = new URI("http", "http://www.baidu.com", null);
System.out.println(u.getScheme());

六、HTTP

HTTP協(xié)議是Web瀏覽器和Web服務(wù)器之間的通信協(xié)議。
HTTP方法:GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE

五、URLConnection

URLConnection是一個(gè)抽象類,表示指向URL指定資源的活動(dòng)連接??梢詮腎nputStream中獲取流內(nèi)容。

        try {
            URL u = new URL("http://www.baidu.com");
            URLConnection connection = u.openConnection();
            System.out.println(connection.getDate());
        } catch (Exception e) {
            e.printStackTrace();
        }

緩存實(shí)現(xiàn)

七、客戶端Socket、服務(wù)端Socket、安全Socket

可以通過Socket連接,連通客戶端和服務(wù)器端,實(shí)現(xiàn)信息流轉(zhuǎn)。安全Socket允許設(shè)置簽名規(guī)則實(shí)現(xiàn)通信的加密。
(后續(xù)補(bǔ)上實(shí)現(xiàn)Demo)

八、非阻塞IO(NIO)

以上的IO通信都是阻塞通信,會(huì)有一定的性能問題。java支持非阻塞IO的通信方式,通過SockerChannel實(shí)現(xiàn)數(shù)據(jù)回傳,不影響主業(yè)務(wù)正常執(zhí)行。
(后續(xù)補(bǔ)上實(shí)現(xiàn)Demo)

九、UDP

上面的通信方式都是TCP連接方式,需要經(jīng)過三次握手才能建立連接,連接結(jié)束后會(huì)斷開。TCP是可靠連接,UDP是不可靠連接,可能會(huì)有丟幀的情況,但效率高。
通過DatagramSocket建立UDP連接,傳輸?shù)臄?shù)據(jù)通過DatagramPackege進(jìn)行封裝。通過send和receive方法發(fā)送和接收數(shù)據(jù)。
(后續(xù)補(bǔ)上實(shí)現(xiàn)Demo)

十、IP組播

廣域網(wǎng)無實(shí)際應(yīng)用價(jià)值,局域網(wǎng)內(nèi)可進(jìn)行配置應(yīng)用,如企業(yè)內(nèi)網(wǎng)、校園網(wǎng)等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 計(jì)算機(jī)網(wǎng)絡(luò)概述 網(wǎng)絡(luò)編程的實(shí)質(zhì)就是兩個(gè)(或多個(gè))設(shè)備(例如計(jì)算機(jī))之間的數(shù)據(jù)傳輸。 按照計(jì)算機(jī)網(wǎng)絡(luò)的定義,通過一定...
    蛋炒飯_By閱讀 1,365評(píng)論 0 10
  • 一、簡(jiǎn)歷準(zhǔn)備 1、個(gè)人技能 (1)自定義控件、UI設(shè)計(jì)、常用動(dòng)畫特效 自定義控件 ①為什么要自定義控件? Andr...
    lucas777閱讀 5,378評(píng)論 2 54
  • Java知識(shí)點(diǎn)1、==和equals的區(qū)別基本類型比較==比較內(nèi)容 equals比較地址值引用類型比較==比較地址...
    壓抑的內(nèi)心閱讀 644評(píng)論 0 0
  • 1. 網(wǎng)絡(luò)編程概述 1.1 計(jì)算機(jī)網(wǎng)絡(luò) 是指將地理位置不同的具有獨(dú)立功能的多臺(tái)計(jì)算機(jī)及其外部設(shè)備,通過通信線路連接...
    JackChen1024閱讀 1,125評(píng)論 0 3
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請(qǐng)注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,297評(píng)論 0 14

友情鏈接更多精彩內(nèi)容