<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 11">
<meta name="Originator" content="Microsoft Word 11">
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">
<!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
本文为原创,如需转载,请注明作者和出处,谢谢!
上一篇:Java网络编程从入门到精通(31):非阻塞I/O简介
为了使读者更好地理解非阻塞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;
importjava.net.*;
importjava.nio.*;
importjava.nio.channels.*;
importjava.io.*;
publicclassFirstNonBlockingIO
{
publicstaticvoidmain(String[]args)throwsException
{
SocketAddressremote=newInetSocketAddress("www.sina.com.cn",80);
SocketChannelchannel=SocketChannel.open(remote);
Stringrequest="GET/HTTP/1.1\r\n"+
"Host:www.sina.com.cn\r\n"+
"Connection:close\r\n\r\n";
ByteBufferheader=ByteBuffer.wrap(request.getBytes());
channel.write(header);
ByteBufferbuffer=ByteBuffer.allocate(1024);
WritableByteChannelout=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 />
-->javatest.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之前必须掌握的知识。在下面的文章等将详细讲解这两部分的内容。
下一篇:Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer)
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!《银河系列原创教程》发布《Java Web开发速学宝典》出版,欢迎定购
分享到:
相关推荐
java网络编程从入门到精通
java阻塞i/o与非阻塞i/o控制,使开发者编写更好的i/o程序
Java高并发编程从入门到精通,附有源码。详细讲解了java并发编程
Java网络编程从入门到精通 总共34章 文档中有例子说明 非常好的学习文档
《Java并发编程从入门到精通》作者结合自己10多年Java并发编程经验,详细介绍了Java并发编程的基础概念、工作原理、编程技巧和注意事项,对Java高性能高并发编程有极大的参考价值。 《Java并发编程从入门到精通》...
原书作者it行业从业时间12年,多家it公司担任研发总监,技术总监(韩剑锋)。 如果你想成为一名架构师,资深的技术大牛,强烈推荐你读一读此书。 本书内容讲解深入浅出,掌握起来毫不费力。
java 网络编程从入门到精通 想学习网络编程的各位,可以看这本书,从基础概念讲起,一直到高级应用。 包含例子。
十四万字总结,PDF包含了十四个大模块:Java基础知识,数据结构,算法,Java集合框架,Java8新特性,操作系统,网络原理,Java多线程及并发编程,Java的IO模型及网络编程,JVM,Mysql,JavaWeb和一个仿Tomcat实现的...
C#编程从入门到精通 本书既为入门者提供了简单教程,同时也为高级编程人员提供了大量的例程。由3部分组成:第一部分是C#入门教程,用12章阐述了C#语言的最基本特征和主要功能,包括:C#介绍;一个简单的欢迎程序;...
Java网络编程从入门到精通(1):Internet地址概述 所有连入Internet的 ...
书《java 从入门到精通》例子的源代码
Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门到精通,掌握面向对象编程的精髓。Java语言教程与案例:从入门...
Java游戏编程从入门到精通java入门教材,我用过,所以推荐。
这个我从来没有看过,我是搞java开发的。
java,java网络,java阻塞编程,非阻塞与阻塞编程
java 网络 不再犹豫 3090工作室 吉林大学java 网络 不再犹豫 3090工作室 吉林大学java 网络 不再犹豫 3090工作室 吉林大学java 网络 不再犹豫 3090工作室 吉林大学