Java網絡編程從入門到精通(34):讀寫緩沖區中的數據---使用get和put方法按順序讀寫單個數據
posted @ 2009-10-09 09:34 銀河使者 閱讀(4865) | 評論 (1) 編輯
隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
|
網絡編程Java網絡編程從入門到精通(34):讀寫緩沖區中的數據---使用get和put方法按順序讀寫單個數據
摘要: 對于緩沖區來說,最重要的操作就是讀寫操作。緩沖區提供了兩種方法來讀寫緩沖區中的數據:get、put方法和array方法。而get、put方法可以有三種讀寫數據的方式:按順序讀寫單個數據、在指定位置讀寫單個數據和讀寫數據塊。除了上述的幾種讀寫數據的方法外,CharBuffer類還提供了用于專門寫字符串的put和append方法。在本文及后面的文章中將分別介紹這些讀寫緩沖區的方法。 閱讀全文
posted @ 2009-10-09 09:34 銀河使者 閱讀(4865) | 評論 (1) 編輯 Java網絡編程從入門到精通(33):非阻塞I/O的緩沖區(Buffer)
摘要: 如果將同步I/O方式下的數據傳輸比做數據傳輸的零星方式(這里的零星是指在數據傳輸的過程中是以零星的字節方式進行的),那么就可以將非阻塞I/O方式下的數據傳輸比做數據傳輸的集裝箱方式(在字節和低層數據傳輸之間,多了一層緩沖區,因此,可以將緩沖區看做是裝載字節的集裝箱)。大家可以想象,如果我們要運送比較少的貨物,用集裝箱好象有點不太合算,而如果要運送上百噸的貨物,用集裝箱來運送的成本會更低。在數據傳輸過程中也是一樣,如果數據量很小時,使用同步I/O方式會更適合,如果數據量很大時(一般以G為單位),使用非阻塞I/O方式的效率會更高。因此,從理論上說,數據量越大,使用非阻塞I/O方式的單位成本就會越低。產生這種結果的原因和緩沖區的一些特性有著直接的關系。在本節中,將對緩沖區的一些主要特性進行講解,使讀者可以充分理解緩沖區的概念,并能通過緩沖區來提高程序的執行效率。 閱讀全文
posted @ 2009-08-31 08:49 銀河使者 閱讀(3220) | 評論 (0) 編輯 Java網絡編程從入門到精通(32):一個非阻塞I/O的例子
摘要: 為了使讀者更好地理解非阻塞I/O,本節給出了一個簡單的例子用來演示如何將非阻塞I/O應用到網絡程序中。讀者可以先不必管這個例子的具體細節。因為這個例子的主要目的并不是講解非阻塞I/O的使用,而是先讓讀者對非阻塞I/O有一個籠統的感性認識。在看完這個例子后,讀者可能會有很多疑問,在本章后面的部分將會逐漸揭開這些迷團。這個例子的主要功能是訪問新浪網,并將新浪網的首頁在控制臺上輸出。 閱讀全文
posted @ 2009-08-21 09:08 銀河使者 閱讀(3029) | 評論 (3) 編輯 Java網絡編程從入門到精通(31):非阻塞I/O簡介
摘要: 在網絡應用中,一般可以采用同步I/O(阻塞I/O)和非阻塞I/O兩種方式進行數據通訊。這兩種方式并非互相排斥和互相取代。我們可以在平時的應用中單獨采用其中一種通訊方式,也可以混合使用這兩種通訊方式。在本文中就什么是非阻塞I/O以及為什么要使用這種通訊方式進行了介紹,在下一篇文章中給出了一個簡單的例子來演示在網絡應用中如何使用非阻塞I/O進行通訊。 閱讀全文
posted @ 2009-08-16 10:46 銀河使者 閱讀(3120) | 評論 (2) 編輯 Java網絡編程從入門到精通(30):定制accept方法
摘要: 使用ServerSocket類的implAccept方法可以使用accept方法返回一個Socket子類對象。但implAccept是protected方法,因此,必須在ServerSocket類的子類中覆蓋accept方法,然后在accept方法中使用implAccept方法重新設置Socket對象。 閱讀全文
posted @ 2009-08-15 16:57 銀河使者 閱讀(2856) | 評論 (4) 編輯 Java網絡編程從入門到精通(29):服務端Socket的選項
摘要: ServerSocket類有以下三個選項:
1. SO_TIMEOUT: 設置accept方法的超時時間。 2. SO_REUSEADDR:設置服務端同一個端口是否可以多次綁定。 3. SO_RECBUF:設置接收緩沖區的大小。 閱讀全文 posted @ 2009-08-12 14:50 銀河使者 閱讀(3197) | 評論 (1) 編輯 Java網絡編程從入門到精通(28):獲取ServerSocket信息的方法及FTP原理
摘要: 本文介紹了如何通過getLocalPort、getInetAddress和getLocalSocketAddress方法獲得服務端的信息,以及FTP的兩種模式:主動模式和被動模式,及其原理。 閱讀全文
posted @ 2009-08-12 14:27 銀河使者 閱讀(4798) | 評論 (1) 編輯 Java網絡編程從入門到精通(27):關閉服務端連接
摘要: 在客戶端和服務端的數據交互完成后,一般需要關閉網絡連接。對于服務端來說,需要關閉Socket和ServerSocket。在關閉Socket后,客戶端并不會馬上感知自已的Socket已經關閉,也就是說,在服務端的Socket關閉后,客戶端的Socket的isClosed和isConnected方法仍然會分別得到false和true。但對已關閉的Socket的輸入輸出流進行操作會拋出一個SocketException異常。 閱讀全文
posted @ 2009-08-04 09:26 銀河使者 閱讀(3703) | 評論 (3) 編輯 Java網絡編程從入門到精通(26):在服務端接收和發送數據
摘要: 在建立完ServerSocket對象后,通過accept方法返回的Socket對象,服務端就可以和客戶端進行數據交互。Socket類和ServerSocket類都有兩個得到輸入輸出流的方法:getInputStream和getOutputStream。對于Socket類而言,使用getInputStream方法得到的InputStream是從服務端獲取數據,而getOutputStream方法得到的OutputStream是向服務端發送數據。而ServerSocket的getInputStream和getOutputStream方法也類似。InputStream從客戶端讀取數據,OutputStream向客戶端發送數據。 閱讀全文
posted @ 2009-07-20 13:53 銀河使者 閱讀(3012) | 評論 (2) 編輯 Java網絡編程從入門到精通(25):創建ServerSocket對象
摘要: ServerSocket類的構造方法有四種重載形式,它們的定義如下:
public ServerSocket() throws IOException public ServerSocket(int port) throws IOException public ServerSocket(int port, int backlog) throws IOException public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException 在上面的構造方法中涉及到了三個參數:port、backlog和bindAddr。其中port是ServerSocket對象要綁定的端口,backlog是請求隊列的長度,bindAddr是ServerSocket對象要綁定的IP地址。 閱讀全文 posted @ 2009-07-12 19:40 銀河使者 閱讀(3764) | 評論 (2) 編輯 Java網絡編程從入門到精通(24):實現HTTP斷點續傳下載工具(附源代碼)
摘要: 在前面的文章曾討論了HTTP消息頭的三個和斷點繼傳有關的字段。一個是請求消息的字段Range,另兩個是響應消息字段Accept-Ranges和Content-Range。其中Accept-Ranges用來斷定Web服務器是否支持斷點繼傳功能。在這里為了演示如何實現斷點繼傳功能,假設Web服務器支持這個功能;因此,我們只使用Range和Content-Range來完成一個斷點繼傳工具的開發。 閱讀全文
posted @ 2009-07-02 18:11 銀河使者 閱讀(4723) | 評論 (2) 編輯 Java網絡編程從入門到精通(23):HTTP消息頭字段
摘要: 本文介紹了HTTP消息的學用頭字段的功能和用法,如Host、Connection、Range、Date、Content-Length等,本文的需要使用HTTP模擬器進行測試,該模擬器請從如下地址下載:http://files.cnblogs.com/nokiaguy/HttpSimulator.rar 閱讀全文
posted @ 2009-06-23 13:04 銀河使者 閱讀(3209) | 評論 (0) 編輯 Java網絡編程從入門到精通(22):實現HTTP模擬器
摘要: 在討論HTTP協議的具體請求和響應頭字段之前,讓我們先來利用以前所學的知識來實現一個HTTP模擬器。所謂HTTP模擬器就是可以在用戶輸入HTTP的請求消息后,由這個模擬器將HTTP請求發送給相應的服務器,再接收服務器的響應消息。這個HTTP模擬器有幾下特點:
1. 可以手工輸入HTTP請求,并向服務器發送。 2. 接收服務器的響應消息。 3. 消息頭和實體內容分段顯示,也就是說,并不是象Telnet等客戶端一樣將HTTP響 應消息全部顯示,而是先顯示消息頭,然后由用戶決定是否顯示實體內容。 4. 集中發送請求。這個HTTP模擬器和Telnet不同的是,并不是一開始就連接服務器,而是將域名、端口以及HTTP請求消息都輸完后,才連接服務器,并將這些請求發送給服務器。這樣做的可以預防服務器提前關閉網絡連接的現象。 5. 可以循環做上述的操作。 閱讀全文 posted @ 2009-06-09 12:16 銀河使者 閱讀(4669) | 評論 (11) 編輯 Java網絡編程從入門到精通(21):HTTP消息的格式
摘要: 當用戶在瀏覽器中輸入一個基于HTTP協議的URL時(以http://開頭的URL),就相當于通知器按著這個URL組織生成一個HTTP請求,并交過個請求發送到服務器;同時,等待服務器的響應。無論是請求還是響應,都統稱為HTTP消息。 閱讀全文
posted @ 2009-06-08 17:22 銀河使者 閱讀(3926) | 評論 (3) 編輯 Java網絡編程從入門到精通(20):HTTP協議簡介
摘要: HTTP協議是一種應用層協議,HTTP是HyperText Transfer Protocol(超文本傳輸協議)的英文縮寫。HTTP可以通過傳輸層的TCP協議在客戶端和服務器之間傳輸數據。HTTP協議主要用于Web瀏覽器和 Web服務器之間的數據交換。我們在使用IE或Firefox瀏覽網頁或下載Web資源時,通過在地址欄中輸入http://host:port /path,開頭的4個字母http就相當于通知瀏覽器使用HTTP協議來和host所確定的服務器進行通訊。 閱讀全文
posted @ 2009-06-07 09:38 銀河使者 閱讀(4613) | 評論 (2) 編輯 |
|