在家上网赚钱更容易
为了使读者更好地理解非阻塞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后,会看到如下的文件内容:
由于新浪网的主页内容太多,因此,为了方便查看程序运行结果,使用输出重定向符“>”将本该输出到控制台的内容输出到sina.txt文件中。从例程7-1可以看出,主要有三点和同步I/O存在差异。
1. 连接服务器(第013行)。使用SocketChannel类,而不是Socket类。
2. 向服务端写数据(第018行)。 使用SocketChannel类中的write方法,而不是OutputStream。
3. 从服务端读数据(第021行)。使用SocketChannel类中的read方法,而不是InputStream。
除了上面的三点外,在本例中还使用了缓冲区来处理输入输出数据。因此,通道(Channels)和缓冲区(Buffers)是学习非阻塞I/O之前必须掌握的知识。在下面的文章等将详细讲解这两部分的内容。
在家上网赚钱更容易
分享到:
相关推荐
了解并熟练掌握这两种I/O模型,有助于开发者编写出高效、可扩展的Java应用程序,特别是在网络编程和服务器开发中,非阻塞I/O能够带来显著的性能提升。因此,深入学习和实践Java中的阻塞I/O与非阻塞I/O控制是非常必要...
本教程"Java网络编程从入门到精通"将带你逐步掌握这个领域的重要知识点。 首先,我们要了解Java网络编程的基础。这包括Java I/O流体系结构,它是处理网络数据传输的核心。在Java中,网络通信基于套接字(Socket)和...
这个“Java学习从入门到精通”教程覆盖了Java编程的各个方面,无论是初学者还是有一定经验的开发者,都能从中受益。通过深入学习和实践,你将能够熟练掌握Java编程,为未来的开发工作打下坚实的基础。
BIO(Blocking I/O)是一种同步阻塞式 I/O 模式,服务器需要为每个客户端分配一个独立的线程来处理请求,导致服务器资源浪费。 NIO(Non-Blocking I/O)是一种异步非阻塞式 I/O 模式,服务器使用单个线程来处理多个...
在深入探讨Java网络编程中的非阻塞与阻塞编程之前,我们先来了解这两个概念的基本含义。阻塞编程,通常指的是在程序执行过程中,当某一部分代码遇到I/O操作时,如读写文件或网络通信,整个程序会暂停运行,等待I/O...
《Java从入门到精通(第4版)》随书PPT是针对初学者和进阶者设计的一套全面的学习资源,旨在帮助读者深入理解和掌握Java编程语言。这套PPT涵盖了从基础语法到高级特性的各个层面,以下是其中可能包含的一些核心知识...
十四万字总结,PDF包含了十四个大模块:Java基础知识,数据结构,算法,Java集合框架,Java8新特性,操作系统,网络原理,Java多线程及并发编程,Java的IO模型及网络编程,JVM,Mysql,JavaWeb和一个仿Tomcat实现的...
Java开发实战从入门到精通的第19章聚焦于Java网络编程,这是一个至关重要的主题,因为网络编程是现代软件开发中的基石。Java以其强大的网络功能和API,为开发者提供了构建网络应用的强大工具。本章教程将深入讲解...
C#编程从入门到精通 本书既为入门者提供了简单教程,同时也为高级编程人员提供了大量的例程。由3部分组成:第一部分是C#入门教程,用12章阐述了C#语言的最基本特征和主要功能,包括:C#介绍;一个简单的欢迎程序;...
7. **NIO(非阻塞I/O)**:Java NIO(New I/O)提供了一种更高效的数据处理方式,特别是在处理大量并发连接时。通道(Channels)和缓冲区(Buffers)是NIO的核心概念。 8. **HTTP协议**:作为应用层最常用的协议之...
总之,"魔乐科技:从入门到精通Java全部源码"是一个宝贵的教育资源,涵盖了Java学习的各个方面,无论你是初学者还是进阶者,都能从中受益匪浅。通过实际操作和不断练习,你将能够熟练掌握Java编程,为你的IT职业生涯...
4. **网络I/O模型**:除了基本的阻塞I/O,Java还提供了非阻塞I/O(NIO)和异步I/O(AIO)模型,它们在处理大量并发连接时能显著提高性能。 5. **套接字编程实例**:包括简单的文件传输、聊天室应用、分布式计算等,...
读书笔记:Java并发编程从入门到精通
Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门...
除了以上章节,书中还涵盖了套接字编程、服务器Socket、网络套接字API、URL和URLConnection类,以及高级主题如NIO(非阻塞I/O)和异步I/O。这些内容详细阐述了如何利用Java进行网络通信,包括建立连接、发送和接收...
《精通Java网络编程第二版》是一本面向Java程序员和网络编程爱好者的专业书籍,由汪晓平、贾敬习、李功三位作者合力撰写,并由清华大学出版社出版。这本书旨在帮助读者深入理解Java语言在网络编程领域的应用,提升在...
此外,非阻塞I/O(NIO)的引入为高性能网络应用提供了可能,如Selector和Channel的概念。 3. **多线程与并发**:在网络编程中,多线程和并发处理是必不可少的,书中会讲解如何在Java中管理线程,以及如何处理并发...
本资源包含"JAVA WEB从入门到精通"这本书随书附带的第2到第10章的源代码,这些章节通常涵盖了Web开发的基础到进阶内容。 1. **基础概念**:Java Web开发首先涉及Servlet和JSP(JavaServer Pages),它们是构建动态...
读书笔记:《Java并发编程从入门到精通》代码练习
- **NIO(非阻塞I/O)**:Java的NIO库提供了更高效的网络编程模型,适用于高并发场景。 - **异步I/O(AIO)**:Java NIO.2引入了异步I/O,允许非阻塞读写操作。 通过阅读《Java网络编程》第三版,开发者可以系统...