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

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

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

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Java網(wǎng)絡(luò)編程從入門到精通(32):一個(gè)非阻塞I/O的例子

    本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

    上一篇:Java網(wǎng)絡(luò)編程從入門到精通(31):非阻塞I/O簡(jiǎn)介

    為了使讀者更好地理解非阻塞I/O,本節(jié)給出了一個(gè)簡(jiǎn)單的例子用來演示如何將非阻塞I/O應(yīng)用到網(wǎng)絡(luò)程序中。讀者可以先不必管這個(gè)例子的具體細(xì)節(jié)。因?yàn)檫@個(gè)例子的主要目的并不是講解非阻塞I/O的使用,而是先讓讀者對(duì)非阻塞I/O有一個(gè)籠統(tǒng)的感性認(rèn)識(shí)。在看完這個(gè)例子后,讀者可能會(huì)有很多疑問,在本章后面的部分將會(huì)逐漸揭開這些迷團(tuán)。這個(gè)例子的主要功能是訪問新浪網(wǎng),并將新浪網(wǎng)的首頁在控制臺(tái)上輸出。

    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();
        }
    }

    測(cè)試

       執(zhí)行如下命令:

    java test.FirstNonBlockingIO > sina.txt


      打開sina.txt后,會(huì)看到如下的文件內(nèi)容:

    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>


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

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

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

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





    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

    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 銀河使者 閱讀(3043) 評(píng)論(3)  編輯  收藏 所屬分類: java 原創(chuàng)網(wǎng)絡(luò)編程

    評(píng)論

    # re: Java網(wǎng)絡(luò)編程從入門到精通(32):一個(gè)非阻塞I/O的例子   回復(fù)  更多評(píng)論   

    支持一下
    2009-08-21 09:21 | 長(zhǎng)生界

    # re: Java網(wǎng)絡(luò)編程從入門到精通(32):一個(gè)非阻塞I/O的例子   回復(fù)  更多評(píng)論   

    頂一下!
    2009-08-21 17:42 | 樂蜂網(wǎng)

    # re: Java網(wǎng)絡(luò)編程從入門到精通(32):一個(gè)非阻塞I/O的例子   回復(fù)  更多評(píng)論   

    Java樂園學(xué)習(xí)網(wǎng)站: http://www.javaly.cn

    有大量的學(xué)習(xí)文章和視頻教程,以及一些項(xiàng)目源碼

    Java樂園學(xué)習(xí)群: 81107233
    2009-08-25 08:52 | 找個(gè)美女做老婆
    主站蜘蛛池模板: 亚洲免费网站在线观看| 和老外3p爽粗大免费视频| 黄+色+性+人免费| 911精品国产亚洲日本美国韩国 | 最新亚洲卡一卡二卡三新区| 欧美亚洲精品一区二区| 国产老女人精品免费视频| 亚洲国产精品无码一线岛国| a级大片免费观看| 国产成A人亚洲精V品无码| 无码国产精品一区二区免费16| 男女啪啪永久免费观看网站| 亚洲AV综合色区无码一二三区 | 18禁成人网站免费观看| 亚洲成年人电影网站| 人妖系列免费网站观看| 色婷婷7777免费视频在线观看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 成人黄色免费网站| 亚洲综合一区二区三区四区五区| 国偷自产一区二区免费视频| 亚洲午夜视频在线观看| 国产成人精品久久免费动漫| 亚洲人精品午夜射精日韩| 成在人线av无码免费高潮喷水| 免费不卡中文字幕在线| 国产伦精品一区二区免费| 日本高清免费aaaaa大片视频| 亚洲精品91在线| 毛片基地免费观看| 一区二区三区免费视频网站| 无码欧精品亚洲日韩一区| 欧美男同gv免费网站观看| 精品免费AV一区二区三区| 亚洲国产精品VA在线观看麻豆| 最好2018中文免费视频| 情人伊人久久综合亚洲| 在线观看免费人成视频色| 成人免费视频一区二区| 久久精品国产亚洲av水果派| 久久99精品国产免费观看|