<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    Java網絡編程從入門到精通(32):一個非阻塞I/O的例子

    本文為原創,如需轉載,請注明作者和出處,謝謝!

    上一篇:Java網絡編程從入門到精通(31):非阻塞I/O簡介

    為了使讀者更好地理解非阻塞I/O,本節給出了一個簡單的例子用來演示如何將非阻塞I/O應用到網絡程序中。讀者可以先不必管這個例子的具體細節。因為這個例子的主要目的并不是講解非阻塞I/O的使用,而是先讓讀者對非阻塞I/O有一個籠統的感性認識。在看完這個例子后,讀者可能會有很多疑問,在本章后面的部分將會逐漸揭開這些迷團。這個例子的主要功能是訪問新浪網,并將新浪網的首頁在控制臺上輸出。

    package test;

    import java.net.*;
    import java.nio.*;
    import java.nio.channels.*;
    import java.io.*;

    public class FirstNonBlockingIO
    {
        
    public static void main(String[] args) throws Exception
        {
            SocketAddress remote 
    = new InetSocketAddress("www.sina.com.cn"80);
            SocketChannel channel 
    = SocketChannel.open(remote);
            String request 
    = "GET / HTTP/1.1\r\n" + 
                             
    "Host:www.sina.com.cn\r\n" +
                             
    "Connection:close\r\n\r\n";
            ByteBuffer header 
    = ByteBuffer.wrap(request.getBytes());
            channel.write(header);        
            ByteBuffer buffer 
    = ByteBuffer.allocate(1024);
            WritableByteChannel out 
    = Channels.newChannel(System.out);
            
    while (channel.read(buffer) != -1)
            {
                buffer.flip();
                out.write(buffer);
                buffer.clear();
            }
            channel.close();
        }
    }

    測試

       執行如下命令:

    java test.FirstNonBlockingIO > sina.txt


      打開sina.txt后,會看到如下的文件內容:

    HTTP/1.0 200 OK
    Date: Sun
    , 01 Apr 2007 06:53:50 GMT
    Server: Apache/
    2.0.58 (Unix)
    Last-Modified: Sun
    , 01 Apr 2007 06:50:47 GMT
    Connection: close
     
     
    </body>
    </html>


        由于新浪網的主頁內容太多,因此,為了方便查看程序運行結果,使用輸出重定向符“>”將本該輸出到控制臺的內容輸出到sina.txt文件中。從例程7-1可以看出,主要有三點和同步I/O存在差異。

    1.  連接服務器(第013行)。使用SocketChannel類,而不是Socket類。
    2.  向服務端寫數據(第018行)。 使用SocketChannel類中的write方法,而不是OutputStream。
    3.  從服務端讀數據(第021行)。使用SocketChannel類中的read方法,而不是InputStream。

       除了上面的三點外,在本例中還使用了緩沖區來處理輸入輸出數據。因此,通道(Channels)和緩沖區(Buffers)是學習非阻塞I/O之前必須掌握的知識。在下面的文章等將詳細講解這兩部分的內容。

    下一篇:Java網絡編程從入門到精通(33):非阻塞I/O的緩沖區(Buffer)





    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-08-21 09:08 銀河使者 閱讀(3034) 評論(3)  編輯  收藏 所屬分類: java 原創網絡編程

    評論

    # re: Java網絡編程從入門到精通(32):一個非阻塞I/O的例子   回復  更多評論   

    支持一下
    2009-08-21 09:21 | 長生界

    # re: Java網絡編程從入門到精通(32):一個非阻塞I/O的例子   回復  更多評論   

    頂一下!
    2009-08-21 17:42 | 樂蜂網

    # re: Java網絡編程從入門到精通(32):一個非阻塞I/O的例子   回復  更多評論   

    Java樂園學習網站: http://www.javaly.cn

    有大量的學習文章和視頻教程,以及一些項目源碼

    Java樂園學習群: 81107233
    2009-08-25 08:52 | 找個美女做老婆
    主站蜘蛛池模板: 亚洲精品国产第一综合99久久| 亚洲男人电影天堂| 国产精品成人亚洲| 午夜两性色视频免费网站| 丁香婷婷亚洲六月综合色| 成人免费午夜无码视频| 亚洲综合国产成人丁香五月激情| 亚色九九九全国免费视频| 亚洲毛片基地4455ww| 成人在线免费观看| 国产亚洲人成在线影院| 亚洲人成网站色在线入口| 国产日韩精品无码区免费专区国产| 中文字幕精品亚洲无线码一区应用| 国产精品免费看久久久香蕉| 国产亚洲一区二区精品| 999久久久免费精品播放| 亚洲中文无码线在线观看| 成人午夜大片免费7777| 国产亚洲视频在线| 国产午夜亚洲精品理论片不卡| 免费国产成人午夜在线观看| 91亚洲精品麻豆| 亚洲av区一区二区三| 一个人免费视频在线观看www| 亚洲美女aⅴ久久久91| 精品久久久久久久免费人妻 | 国产福利免费视频 | 91福利免费网站在线观看| 亚洲精品成人图区| 国产成人涩涩涩视频在线观看免费| 一级做a爰片久久毛片免费看 | 亚洲另类视频在线观看| 国产一区视频在线免费观看| 中文字幕久无码免费久久| 亚洲熟妇无码爱v在线观看| 免费一级大黄特色大片| 91福利免费视频| 四虎影视在线看免费观看| 亚洲视频免费观看| 亚洲欧洲国产成人综合在线观看|