NIO入门

本文主要为知识性、概念性介绍。NIO涉及的API较多,熟练使用需要大量的联系。可参考Java书籍推荐。

NIO1.0

NIO1.0是Java1.4(2002)引入的,主要特性如下:

  • 进行异步I/O操作的缓冲区ByteBuffer等;
  • 进行异步I/O操作的管道Pipe;
  • 进行异步I/O操作(异步或同步)的Channel,包括ServerSocketChannel和SocketChannel;
  • 多种字符集的编码能力和解码能力;
  • 实现非阻塞I/O操作的多路复用器selector;
  • 基于流行的Perl实现的正则表达式类库;
  • 文件通道FileChannel。

NIO2.0

NIO2.0是Java1.7(2011.07)引入的,主要提供了:

  • 提供能够批量获取文件属性的API,这些API具有平台无关性,不与特性的文件系统相耦合,另外它提供了标准文件系统的SPI,供各个服务提供商扩展实现;
  • 提供AIO功能,支持基于文件的异步I/O操作和针对网络套接字的异步操作;
  • 完成JSR-51定义的通道功能,包括对配置和多播数据报的支持等。

AsynchronousChannel接口的主要作用是使通道支持异步I/O操作。

异步I/O操作有以下两种方式进行实现。
(1)方法
Future<V> operation(...)
operation代表I/O操作的名称,大多数都是读或写操作。泛型变量V代表经过I/O操作后返回结果的数据类型。使用Future对象可以用于检测I/O操作是否完成,或者等待完成,以及用于接收I/O操作处理后的结果。
(2)回调
void operation(... A attachment, CompletionHandler<V,? super A> handler)
A类型的对象attachment的主要作用是让外部与CompletionHandler对象内部进行通信。使用CompletionHandler回调的方式实现异步I/O操作的优点是CompletionHandler对象可以被复用。当I/O操作成功或失败时,CompletionHandler对象中的指定方法会被调用。

posted on 2019-07-27 09:41  blouson  阅读(184)  评论(0编辑  收藏  举报