NIO 总览

NIO API 是由 Java 1.4 引入的,被广泛用于各种应用。NIO API 封装了 IO 非阻塞操作。

首先,最好了解一下 MINA 是基于 NIO 1 写的。Java 7 设计了一个新版本 NIO-2,(因为我们基于 NIO 1) 我们并没有从这一版本 (NIO-2) 所带来的新加功能中获益。

也有必要了解到 NIO 中的 N 意思是 New,但是我们在很多地方将使用 Non-Blocking (非阻塞) 术语。NIO-2 应该被视为一个 New New I/O…

java.nio.* 包包含了以下关键构造

  • Buffers (缓冲) - 数据容器
  • Chartsets (字符集) - 字节和 Unicode 码的翻译容器
  • Channels (通道) - 表示实体 I/O 操作的连接
  • Selectors (选择器) - 提供可选择的、多路非阻塞 IO
  • Regexps (正则表达式) - 提供一些操作正则表达式的工具

我们在 MINA 框架中最感兴趣的是 Channels (通道)、 Selectors (选择器) 以及 Buffers (缓冲),除非我们想要对用户隐藏这些元素。

本用户指南因此将把重点放在基于这些内部组件构建的每个对象上。

NIO vs BIO

很有必要来了解一下这两个 API 之间的差别。BIO,或者叫做 Blocking IO,依赖于用于阻塞模式的普通套接字:在你在套接字上进行读、写或者任何操作的时候,被调用的操作将会一直阻塞住调用者直到操作结束。

在某些情况下,能够调用这些操作是很重要的,并且希望被调用的操作在其操作结束之后能够通知调用者:这样调用者在这段时间之内可以做一些其他的事情。

这也是在你具有众多连接的套接字时 NIO 所能提供的一个更好的方式的地方:你无须为每个连接创建一个特定的线程,你仅仅需要很少的几个来做同样事情的线程。

如果你想获得涵盖有 NIO 的更多信息,互联网上有很多相关的不错的文章,也有一些关于这方面内容的出版的书籍。