`

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

    博客分类:
  • Java
阅读更多

在家上网赚钱更容易

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->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();
    }
}

测试

   执行如下命令:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->java test.FirstNonBlockingIO > sina.txt


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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->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阻塞i/o与非阻塞i/o控制

    了解并熟练掌握这两种I/O模型,有助于开发者编写出高效、可扩展的Java应用程序,特别是在网络编程和服务器开发中,非阻塞I/O能够带来显著的性能提升。因此,深入学习和实践Java中的阻塞I/O与非阻塞I/O控制是非常必要...

    java网络编程从入门到精通

    本教程"Java网络编程从入门到精通"将带你逐步掌握这个领域的重要知识点。 首先,我们要了解Java网络编程的基础。这包括Java I/O流体系结构,它是处理网络数据传输的核心。在Java中,网络通信基于套接字(Socket)和...

    Java并发编程从入门到精通(pdf)(附源码)

    《Java并发编程从入门到精通》是一本专为Java开发者设计的深度学习并发编程的书籍。作者韩剑锋,凭借其12年的IT行业经验,曾担任多家IT公司的研发总监和技术总监,以其丰富的实战经验和深厚的理论知识,为读者提供了...

    java学习从入门到精通教程(pdf)

    这个“Java学习从入门到精通”教程覆盖了Java编程的各个方面,无论是初学者还是有一定经验的开发者,都能从中受益。通过深入学习和实践,你将能够熟练掌握Java编程,为未来的开发工作打下坚实的基础。

    java从入门到精通PPT

    总的来说,“java从入门到精通PPT”提供了一个全面的学习路线,从基础到进阶,覆盖了Java编程的各个方面。通过这个压缩包,你可以按照章节逐步学习,每个PPT都是一个知识点的总结,方便查询和复习。不论你是初学者...

    一站式学习Java网络编程 全面理解BIO:NIO:AIO1

    BIO(Blocking I/O)是一种同步阻塞式 I/O 模式,服务器需要为每个客户端分配一个独立的线程来处理请求,导致服务器资源浪费。 NIO(Non-Blocking I/O)是一种异步非阻塞式 I/O 模式,服务器使用单个线程来处理多个...

    Java从入门到精通.pdf

    十四万字总结,PDF包含了十四个大模块:Java基础知识,数据结构,算法,Java集合框架,Java8新特性,操作系统,网络原理,Java多线程及并发编程,Java的IO模型及网络编程,JVM,Mysql,JavaWeb和一个仿Tomcat实现的...

    Java非阻塞I_O在乡村可视化远程医疗系统中的应用.pdf

    Java 非阻塞 I/O 的工作原理是基于多线程技术,使用一个线程来处理所有的网络通信,实现高效的并行处理。这种方式可以减少系统的开销,提高系统的性能。 在乡村可视化远程医疗系统中,使用 Java 非阻塞 I/O 可以...

    java网络编程(非阻塞与阻塞编程)

    在深入探讨Java网络编程中的非阻塞与阻塞编程之前,我们先来了解这两个概念的基本含义。阻塞编程,通常指的是在程序执行过程中,当某一部分代码遇到I/O操作时,如读写文件或网络通信,整个程序会暂停运行,等待I/O...

    从入门到精通java部全代码

    《从入门到精通Java全代码》是一本针对Java初学者精心编写的教程,旨在帮助读者逐步掌握这门广泛使用的编程语言。"明日科技"作为标签,暗示了这本书可能结合了现代编程理念和技术,以适应快速发展的IT行业。压缩包中...

    Java开发实战从入门到精通视频教程下载第19章 Java网络编程.zip

    Java开发实战从入门到精通的第19章聚焦于Java网络编程,这是一个至关重要的主题,因为网络编程是现代软件开发中的基石。Java以其强大的网络功能和API,为开发者提供了构建网络应用的强大工具。本章教程将深入讲解...

    C#编程从入门到精通

    C#编程从入门到精通 本书既为入门者提供了简单教程,同时也为高级编程人员提供了大量的例程。由3部分组成:第一部分是C#入门教程,用12章阐述了C#语言的最基本特征和主要功能,包括:C#介绍;一个简单的欢迎程序;...

    《Java网络编程实例:Java网络编程实例》

    7. **NIO(非阻塞I/O)**:Java NIO(New I/O)提供了一种更高效的数据处理方式,特别是在处理大量并发连接时。通道(Channels)和缓冲区(Buffers)是NIO的核心概念。 8. **HTTP协议**:作为应用层最常用的协议之...

    魔乐科技:从入门到精通Java全部源码

    总之,"魔乐科技:从入门到精通Java全部源码"是一个宝贵的教育资源,涵盖了Java学习的各个方面,无论你是初学者还是进阶者,都能从中受益匪浅。通过实际操作和不断练习,你将能够熟练掌握Java编程,为你的IT职业生涯...

    Java网络编程好例子

    4. **网络I/O模型**:除了基本的阻塞I/O,Java还提供了非阻塞I/O(NIO)和异步I/O(AIO)模型,它们在处理大量并发连接时能显著提高性能。 5. **套接字编程实例**:包括简单的文件传输、聊天室应用、分布式计算等,...

    jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)

    在Java编程领域,JDK(Java Development Kit)是开发和运行Java应用程序的...总的来说,"JDK6.0从入门到精通-----chapter5网络编程 新I/O"是一个极好的学习资源,无论你是初学者还是有经验的开发者,都能从中获益良多。

    读书笔记:Java并发编程从入门到精通.zip

    读书笔记:Java并发编程从入门到精通

    Java开发从入门到精通 扶松柏,陈小玉编著 2016.09 随书光盘

    《Java开发从入门到精通》是由扶松柏和陈小玉两位专家编著的书籍,旨在帮助初学者和有一定基础的开发者系统学习和掌握Java编程技术。2016年9月出版的这本书包含了丰富的教学内容,配合随书光盘,提供了一套完整的...

    java网络编程第四版pdf

    除了以上章节,书中还涵盖了套接字编程、服务器Socket、网络套接字API、URL和URLConnection类,以及高级主题如NIO(非阻塞I/O)和异步I/O。这些内容详细阐述了如何利用Java进行网络通信,包括建立连接、发送和接收...

    Java网络编程实例(随书源代码)

    - **NIO(非阻塞I/O)**:Java的新I/O API提供了选择器(Selector)和通道(Channel),能实现高效的异步I/O操作。 - **HTTP通信**:使用HttpURLConnection或第三方库(如Apache HttpClient)实现HTTP客户端和...

Global site tag (gtag.js) - Google Analytics