【转】在Java中使用NIO进行网络编程
在JDK中,有一个非常有意思的库:NIO(New I/O)。这个库中有3个重要的类,分别是java.nio.channels中Selector和Channel,以及java.nio中的Buffer。
本篇文章我们首先了解一下为什么需要NIO来进行网络编程,然后看看一步一步来讲解如何在网络编程中使用NIO。
为什么需要NIO
使用Java编写过Socket程序的同学一定都知道Socket和SocketServer。当调用某个调用的时候,调用的地方就会阻塞,等待响应。这种方式对于小规模的程序非常方便,但是对于大型的程序就有点力不从心了,当有大量的连接的时候,我们可以为每一个连接建立一个线程来操作。但是这种做法带来的缺陷也是显而易见的:
硬件能够支持大量的并发。
并发的数量始终有一个上限。
各个线程之间的优先级不好控制。
各个Client之间的交互与同步困难。
我们也可以使用一个线程来处理所有的请求,使用不阻塞的IO,轮询查询所有的Client。这种做法同样也有缺陷:无法迅速响应Client端,同时会消耗大量轮询查询的时间。
所以,我们需要一种poll的模式来处理这种情况,从大量的网络连接中找出来真正需要服务的Client。这正是NIO诞生的原因:提供一种Poll的模式,在所有的Client中找到需要服务的Client。
回到我们刚刚说到的3个最最重要的Class:java.nio.channels中Selector和Channel,以及java.nio中的Buffer。
Channel代表一个可以被用于Poll操作的对象(可以是文件流也可以使网络流),Channel能够被注册到一个Selector中。通过调用Selector的select方法可以从所有的Channel中找到需要服务的实例(Accept,read ..)。Buffer对象提供读写数据的缓存。相对于我们熟悉的Stream对象,Buffer提供更好的性能以及更好的编程透明性(人为控制缓存的大小以及具体的操作)。
配合Buffer使用Channel
与传统模式的编程不用,Channel不使用Stream,而是Buffer。我们来实现一个简单的非阻塞Echo Client:
package com.cnblogs.gpcuster;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class TCPEchoClientNonblocking {
public static void main(String args[]) throws Exception {
if ((args.length < 2) || (args.length > 3))// Testforcorrect#ofargs
throw new IllegalArgumentException(
"Param
相关文档:
作文本编辑器的时候,撤销(undo)、恢复(redo)是必不可少的两个功能。实现这个功能,要用到javax.swing.undo包中的UndoManager类。
UndoManager类有如下常用方法:
boolean canUndo() ——判断能否进行撤消操作,可以则返回true。
boolean canRedo() ——判断能否进行恢复操作,可以则返 ......
eclipse官方网站
http://www.eclipse.org/downloads/
Eclipse 3.4M2官方下载地址 大小:140M
http://download.actuatechina.com/eclipse/eclipse/downloads/drops/S-3.4M2-200709210919/eclipse-SDK-3.4M2-win32.zip
Eclipse Classic3.41 大小:151M
http://www.eclipse.org/downloads/download.php?file=/eclipse/down ......
由于有一定的Java和JUnit的基础,所以感觉第一课比较简单,但收获还是有的,比如说重构部分介绍的内容。
JUnit要点:
测试方法的命名规则:
l 方法必须声明为public
l 方法的返回值必须为void
l 方法的名字必须以小写的test为前缀
l 方法不能接受任何参数
重构要点:
1. &nbs ......
那天正偷着菜突然就想到了为何不做一个农场呢?
正好敢上结课项目就要开始了,老师又催着找项目了。
说做就做了,
但从来没有涉及过网页游戏方面,然后疯狂查资料,,收获却不多,发现自己知道 的太少了不精flash,flex也不会,光界面就不好办,
但是既然想到这了,不会也要上了,,哈。
不会flash了我就用css+javascri ......