代码号为”Merlin”的J2SE1
4 带来了一些激动人心的新特性,诸如对正则表达式的支持,异步输入输出流,通道(Channel),字符集等
虽然该版本还处在测试阶段,但这些新特性早已让开发人员们跃跃欲试
在 Merlin 发布之前,异步输入输出流的应用还只是 C,C++程序员的特殊武器;在 Merlin中引入异步输入输出机制之后,Java程序员也可以利用它完成很多简洁却是高质量的代码了
本文将介绍怎样使用异步输入输出流来编写 Socket 进程通信程序
异步输入输出机制的引入 在 Merlin 之前,编写 Socket 程序是比较繁琐的工作
因为输入输出都必须同步
这样,对于多客户端客户/服务器模式,不得不使用多线程
即为每个连接的客户都分配一个线程来处理输入输出
由此而带来的问题是可想而知的
程序员不得不为了避免死锁,线程安全等问题,进行大量的编码和测试
很多人都在抱怨为什么不在Java中引入异步输入输出机制
比较官方的解释是,任何一种应用程序接口的引入,都必须兼容任何操作平台
因为Java 是跨平台的
而当时支持异步输入输出机制的操作平台显然不可能是全部
自 Java 2 Platform 以后,分离出J2SE,J2ME,J2EE 三种不同类型的应用程序接口,以适应不同的应用开发
Java 标准的制订者们意识到了这个问题,并且支持异步输入输出机制的操作平台在当今操作平台中处于主流地位
于是,Jdk(J2SE) 的第五次发布中引入了异步输入输出机制
以前的Socket 进程通信程序设计中,一般客户端和服务器端程序设计如下: 1
服务器端: //服务器端监听线程 while (true) {
Socket clientSocket; clientSocket = socket
accept(); //取得客户请求 Socket,如