1.Buffers(缓冲区)
Buffer类是常规JAVA类和channels(管道)之间的通道。Buffer包含固定长度的数组中,数组中存放着原始数据,封装在一个包含状态的对象中。管道可以消耗缓冲区的数据,也可以向缓冲区中存入数据。此外,还有一种特殊类型的缓冲区,用于内存映射文件。
2.Channels(通道)
NIO中引入的最抽象的概念就是Channel。通道对象代表着通信连接。通信连接可以是单向的,也可以是双向的。可以理解成缓冲区和IO设备之间的道路。
一些java.io中的旧类也可以使用channel。为了和使用通道的文件,socket连接,或多或少地添加了新方法
大多数通道可以工作在非块模式下,有很好的可扩展性,尤其是在和Selectors(选择器)同时使用的时候。
3.File locking and memory-mapped files(文件锁和内存映射文件)
FileChannel对象提供许多面向文件的功能。比如文件锁这个进程之间处理数据必不可少的功能。把内存映射到文件,在你看来,文件就像是在内存之上一样,省去了把文件拷贝到内存的操作。
4.Sockets
SocketChannel 提供了一种和网络套接字新的交互方法,SocketChannel可以工作在非阻塞模式可以用来和Selectors一起工作。作为结果,许多scoket可以多路传输,比起java.net里的传统socket类更高效
5.Selectors
Selectors提供准备就绪选择(查看channel是否准备就绪)。也可以确定你感兴趣的Channel。通过使用Selector,大量的活动中的I/O channel 可以被一个线程简单有效地监控操作。
6.Character sets(字符集)
提供了多种从byte流映射到字符的方式。