Java編程那些事兒——計算機內部的數據表達、網絡編程基礎

Java編程那些事兒——計算機內部的數據表達html

Java, JDK, Java編譯器, Javac, Java基礎程序員

1.3 計算機內部的數據表達

    計算機內部數據表達的總原則就是:把一切內容數值化、數字化。這個也是編程時處理數據的基本方式,對於編程理解的越深刻,則將越認同該原則。

    其實計算機也只能這樣,由於計算機內部只能存儲0和1兩個數字,因此必須把指令、數據、圖片、文本等各類各樣的內容數字化成0和1進行存儲、傳輸和顯示。

    1.3.1 整數的表達

    整數有正負之分,可是計算機內部只能存儲0和1,則計算機內部將符號數字化,用二進制碼的最高位表明符號位,規定該位爲0表明正,1表明負。這就是符號數字化的規定。

    前面介紹過整數在計算機內部都是以二進制的形式保存的。可是爲了計算方便,以及簡化CPU的結構,因此在存儲和運算時都採用補碼的形式。

    前面介紹的那些直接計算出來的二進制形式,都稱做整數的原碼。規定正數的原碼、反碼和補碼都是自身。

    而對於負數,仔細研究一下其組成格式。以8位機爲例,也就是一個數字佔計算機中的8位,也就是一個字節,用最高位存儲符號位,其它的位存儲數值。例如-8的原碼是10001000,最高位的1表明負數,後續的7位表明數值。

    負數的反碼是指符號位不變,其餘的位取反,也就是0變1,1變0,則-8的反碼是11110111.負數的補碼是指在反碼的數值位上加1,運算後獲得的結果,只計算數值位,不改變符號位。則-8的補碼是11111000,該次運算中,低位向高位進行了進位。

    規律:補碼的補碼等於負數的原碼。

    也就是對負數的補碼再求補,則獲得的負數的原碼。

    熟悉整數的表達,對於後續理解數據的區間以及進行強制轉換之後獲得的數值頗有幫助,也是進行位運算的基礎。

    備註:小數,編程語言中稱浮點數,的存儲形式和整數不一樣。

    1.3.2 字符的表達

    字符指計算機內部單個的符號,如標點符號、英文字母和漢字等等。由於這些字符種類各異,計算機沒法直接表達,那麼就採用了計算機編程中也經常使用的方式,對每一個字符進行編號,例如規定a字符編號爲97,b字符編號爲98等等。

    因爲須要編號的字符不少,就專門規定了一系列字符和編號的對應規則,那麼這些對應表就被稱做字符集,常見的字符集有ASCII、GB23十二、BIG5等。

    在計算機內部存儲、運算和傳輸時,都只須要使用該編號便可。

    字符集比較完美的解決了字符的存儲和傳輸的問題。

    因此字符在程序內部能夠參與運算,其實參與運算的就是這個字符的編號,字符集規律是不少字符變換邏輯實現的基礎。

    備註:字符的顯示則經過專門的字符顯示碼實現。

    1.3.3 總結

    其實計算機內部全部的東西都是以數字的形式存儲的,這裏只是但願經過這兩種簡單的結構,使你們瞭解將數據數字化的思想,這是編程時經常使用的思想之一。編程

Java編程那些事兒——網絡編程基礎服務器

Java, JDK, Java編譯器, Javac, Java基礎網絡

對於初學者,或者沒有接觸過網絡編程的程序員,會以爲網絡編程涉及的知識很高深,很難,其實這是一種誤解,當你的語法熟悉之後,其實基本的網絡編程如今已經被實現的異常簡單了。

    1.4.1 網絡編程是什麼?

    網絡編程的本質是兩個設備之間的數據交換,固然,在計算機網絡中,設備主要指計算機。數據傳遞自己沒有多大的難度,不就是把一個設備中的數據發送給兩外一個設備,而後接受另一個設備反饋的數據。

    如今的網絡編程基本上都是基於請求/響應方式的,也就是一個設備發送請求數據給另一個,而後接收另外一個設備的反饋。

    在網絡編程中,發起鏈接程序,也就是發送第一次請求的程序,被稱做客戶端(Client),等待其餘程序鏈接的程序被稱做服務器(Server)。客戶端程序能夠在須要的時候啓動,而服務器爲了可以時刻相應鏈接,則須要一直啓動。例如以打電話爲例,首先撥號的人相似於客戶端,接聽電話的人必須保持電話暢通相似於服務器。

    鏈接一旦創建之後,就客戶端和服務器端就能夠進行數據傳遞了,並且二者的身份是等價的。

    在一些程序中,程序既有客戶端功能也有服務器端功能,最多見的軟件就是BT、emule這類軟件了。

    下面來談一下如何創建鏈接以及如何發送數據。

    1.4.2 IP地址和域名

    在現實生活中,若是要打電話則須要知道對應人的電話號碼,若是要寄信則須要知道收信人的地址。在網絡中也是這樣,須要知道一個設備的位置,則須要使用該設備的IP地址,具體的鏈接過程由硬件實現,程序員不須要過多的關心。

    IP地址是一個規定,如今使用的是IPv4,既由4個0-255之間的數字組成,在計算機內部存儲時只須要4個字節便可。在計算機中,IP地址是分配給網卡的,每一個網卡有一個惟一的IP地址,若是一個計算機有多個網卡,則該臺計算機則擁有多個不一樣的IP地址,在同一個網絡內部,IP地址不能相同。IP地址的概念相似於電話號碼、身份證這樣的概念。

    因爲IP地址不方便記憶,因此有專門創造了域名(Domain Name)的概念,其實就是給IP取一個字符的名字,例如163.com、sina.com等。IP和域名之間存在必定的對應關係。若是把IP地址類比成身份證號的話,那麼域名就是你的姓名。

    其實在網絡中只能使用IP地址進行數據傳輸,因此在傳輸之前,須要把域名轉換爲IP,這個由稱做DNS的服務器專門來完成。

    因此在網絡編程中,可使用IP或域名來標識網絡上的一臺設備。

    1.4.3 端口的概念

    爲了在一臺設備上能夠運行多個程序,人爲的設計了端口(Port)的概念,相似的例子是公司內部的分機號碼。

    規定一個設備有216個,也就是65536個端口,每一個端口對應一個惟一的程序。每一個網絡程序,不管是客戶端仍是服務器端,都對應一個或多個特定的端口號。因爲0-1024之間多被操做系統佔用,因此實際編程時通常採用1024之後的端口號。

    使用端口號,能夠找到一臺設備上惟一的一個程序。

    因此若是須要和某臺計算機創建鏈接的話,只須要知道IP地址或域名便可,可是若是想和該臺計算機上的某個程序交換數據的話,還必須知道該程序使用的端口號。

    1.4.4 數據傳輸方式

    知道了如何創建鏈接,下面就是如何傳輸數據了,先來看一下數據傳輸的方式。

    在網絡上,不論是有線傳輸仍是無線傳輸,數據傳輸的方式有兩種:

    <!——[if !supportLists]——>l <!——[endif]——>TCP(Transfer Control Protocol)

    傳輸控制協議方式,該傳輸方式是一種穩定可靠的傳送方式,相似於顯示中的打電話。只須要創建一次鏈接,就能夠屢次傳輸數據。就像電話只須要撥一次號,就能夠實現一直通話同樣,若是你說的話不清楚,對方會要求你重複,保證傳輸的數據可靠。

    使用該種方式的優勢是穩定可靠,缺點是創建鏈接和維持鏈接的代價高,傳輸速度不快。

    <!——[if !supportLists]——>l <!——[endif]——>UDP(User Datagram Protocol)

    用戶數據報協議方式,該傳輸方式不創建穩定的鏈接,相似於發短信息。每次發送數據都直接發送。發送多條短信,就須要屢次輸入對方的號碼。該傳輸方式不可靠,數據有可能收不到,系統只保證盡力發送。

    使用該種方式的優勢是開銷小,傳輸速度快,缺點是數據有可能會丟失。

    在實際的網絡編程中,你們能夠根據須要選擇任何一種傳輸方式,或組合使用這兩種方式實現數據的傳遞。

    1.4.5 協議的概念

    協議(Protocol)是網絡編程中一個很是重要的概念,指的是傳輸數據的格式。由於你們在網絡中須要傳輸各類各樣的信息,在程序中得到到的都是一組數值,如何閱讀這些數值呢,就須要提早規定好這組數據的格式,在客戶端按照該格式生成發送數據,服務器端按照該格式閱讀該數據,而後在按照必定的格式生成數據反饋給客戶端,客戶端再按照該格式閱讀數據。現實中相似的例子就是電報編碼,每一個數字都是用特定的數據表達。

    通常程序的協議都分紅客戶端發送的數據格式,以及服務器端反饋的數據格式,客戶端和服務器端都遵循該格式生成或處理數據,實現二者之間的複雜數據交換。

    1.4.6 小結

    網絡編程就是使用IP地址,或域名,和端口鏈接到另外一臺計算機上對應的程序,按照規定的協議(數據格式)來交換數據,實際編程中創建鏈接和發送、接收數據在語言級已經實現,作的更多的工做是設計協議,以及編寫生成和解析數據的代碼罷了,而後把數據轉換成邏輯的結構顯示或控制邏輯便可。編程語言

瞭解更多詳情請登陸超人學院網站http://www.crxy.cn或者每週日晚八點半相約免費公開課 https://ke.qq.com/course/53102#term_id=100145289  具體詳情請聯繫QQ2435014406網站

相關文章
相關標籤/搜索