Java NIO 与 IO 的区别和比较 导读 J2SE1
4 以上版本中发布了全新的I/O 类库
本文将通过一些实例来简单介绍NIO 库提供的一些新特性:非阻塞I/O,字符转换,缓冲以及通道
介绍NIO NIO 包(java
*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O 类中的一些问题
1. Buffer:它是包含数据且用于读写的线形表结构
其中还提供了一个特殊类用于内存映射文件的I/O操作
2. Charset:它提供Unicode 字符串影射到字节序列以及逆影射的操作
3. Channels:包含socket, file 和 pipe 三种管道,它实际上是双向交流的通道
4. Selector:它将多元异步I/O 操作集中到一个或多个线程中(它可以被看成是Unix 中 select()函数或Win32 中 WaitForSingleEvent()函数的面向对象版本)
回顾传统 在介绍NIO 之前,有必要了解传统的I/O 操作的方式
以网络应用为例,传统方式需要监听一个ServerSocket,接受请求的连接为其提供服务(服务通常包括了处理请求并发送响应)图一是服务器的生命周期图,其中标有粗黑线条的部分表明会发生I/O 阻塞
图一 可以分析创建服务器的每个具体步骤
首先创建ServerSocket ServerSocket server=new ServerSocket( 10000); 然后接受新的连接请求 Socket newConnection=server
accept(); 对于accept 方法的调用将造成阻塞,直到ServerSocket 接受到一个连接请求为止
一旦连接请求被接受,服务器可以读客户socket 中的请求
InputStream in = newConnection
getInputSt