`

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网络编程从入门到精通

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

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

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

    java从入门到精通PPT

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

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

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

    《Java从入门到精通(第4版)》随书PPT

    《Java从入门到精通(第4版)》随书PPT是针对初学者和进阶者设计的一套全面的学习资源,旨在帮助读者深入理解和掌握Java编程语言。这套PPT涵盖了从基础语法到高级特性的各个层面,以下是其中可能包含的一些核心知识...

    Java从入门到精通.pdf

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

    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. **套接字编程实例**:包括简单的文件传输、聊天室应用、分布式计算等,...

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

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

    JAVA基础入门到精通pdf

    本资源“JAVA基础入门到精通pdf”提供了一条系统学习Java的路径,适合初学者作为入门教程。以下是对Java基础知识的详细解读: 1. **Java概述**:Java是由Sun Microsystems(现为Oracle公司)于1995年推出的一种面向...

    Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓

    Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门...

    java网络编程第四版pdf

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

    精通Java网络编程第二版

    《精通Java网络编程第二版》是一本面向Java程序员和网络编程爱好者的专业书籍,由汪晓平、贾敬习、李功三位作者合力撰写,并由清华大学出版社出版。这本书旨在帮助读者深入理解Java语言在网络编程领域的应用,提升在...

    韩顺平java从入门到精通的教学PPT

    "韩顺平java从入门到精通的教学PPT"是一个专门为初学者和有志于深入理解Java编程的开发者设计的教育资源。韩顺平是一位知名的IT教育专家,他在Java教学方面有着丰富的经验,他的教程往往深入浅出,易于理解,深受...

    Java网络编程第三版.pdf

    此外,非阻塞I/O(NIO)的引入为高性能网络应用提供了可能,如Selector和Channel的概念。 3. **多线程与并发**:在网络编程中,多线程和并发处理是必不可少的,书中会讲解如何在Java中管理线程,以及如何处理并发...

    JAVA WEB从入门到精通 随书源码

    本资源包含"JAVA WEB从入门到精通"这本书随书附带的第2到第10章的源代码,这些章节通常涵盖了Web开发的基础到进阶内容。 1. **基础概念**:Java Web开发首先涉及Servlet和JSP(JavaServer Pages),它们是构建动态...

    Java网络编程(第4版)PDF

    此外,Java NIO(New Input/Output)是另一个重要的主题,它是Java 1.4引入的新特性,提供了非阻塞I/O操作,能够显著提升性能。NIO基于通道(Channel)和选择器(Selector),使得程序可以同时处理多个连接,适用于...

Global site tag (gtag.js) - Google Analytics