您现在的位置是:首页 >

Java网络编程从入门到精通(32):一个非阻塞I/O的例子

火烧 2022-08-08 03:00:33 1028
Java网络编程从入门到精通(32):一个非阻塞I/O的例子   为了使读者更好地理解非阻塞I/O 本节给出了一个简单的例子用来演示如何将非阻塞I/O应用到网络程序中 读者可以先不必管这个例子的具体细

Java网络编程从入门到精通(32):一个非阻塞I/O的例子  

Java网络编程从入门到精通(32):一个非阻塞I/O的例子

  为了使读者更好地理解非阻塞I/O 本节给出了一个简单的例子用来演示如何将非阻塞I/O应用到网络程序中 读者可以先不必管这个例子的具体细节 因为这个例子的主要目的并不是讲解非阻塞I/O的使用 而是先让读者对非阻塞I/O有一个笼统的感性认识 在看完这个例子后 读者可能会有很多疑问 在本章后面的部分将会逐渐揭开这些迷团 这个例子的主要功能是访问新浪网 并将新浪网的首页在控制台上输出

   package test;import  *;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(   );        SocketChannel channel = SocketChannel open(remote);        String request =  GET / HTTP/ rn  +                           Host:rn  +                          Connection:closernrn ;        ByteBuffer header = ByteBuffer wrap(request getBytes());        channel write(header);                ByteBuffer buffer = ByteBuffer allocate( );        WritableByteChannel out = Channels newChannel(System out);        while (channel read(buffer) !=  )        {            buffer flip();            out write(buffer);            buffer clear();        }        channel close();    }}

  测试

  执行如下命令

   java test FirstNonBlockingIO > sina txt

  打开sina txt后 会看到如下的文件内容

   HTTP/    OKDate: Sun    Apr    : :  GMTServer: Apache/  (Unix)Last Modified: Sun    Apr    : :  GMTConnection: close  </body></>

  由于新浪网的主页内容太多 因此 为了方便查看程序运行结果 使用输出重定向符 > 将本该输出到控制台的内容输出到sina txt文件中 从例程 可以看出 主要有三点和同步I/O存在差异

     连接服务器(第 行) 使用SocketChannel类 而不是Socket类

     向服务端写数据(第 行) 使用SocketChannel类中的write方法 而不是OutputStream

     从服务端读数据(第 行) 使用SocketChannel类中的read方法 而不是InputStream

lishixinzhi/Article/program/Java/hx/201311/26564  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码