【译】Java NIO 概览

Java NIO包含了如下几个核心组件:

  • Channels
  • Buffers
  • Selectors

Java NIO 有比这多得多的类和组件,但是依我看来,这三种是这套API的核心架构。其它的组件,例如Pipe,FileLock等,仅仅是用来联系这三个核心组件的工具类而已。因此,我将主要介绍这三个核心组件。

Channels 和 Buffers

一般来说,所有的NIO都是以Channel起手。Channel有点像是一个流。通过Channel数据可以被读入到buffer中。数据也可以通过buffer写入到一个channel。下面用图说明:

 有许多Channel、Buffer的实现。下面列出了一些比较重要的:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你所见,这些channels覆盖了UDP + TCP 的网络IO和文件IO。

下面是Buffer接口的核心实现:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

这些Buffer覆盖了Java基本类型数据(除了Boolean),Java NIO还有一个叫做MappedByteBuffer的类,用来把内存数据和文件映射起来。这个Buffer在后续章节里说明。

Selectors

选择器允许一个线程控制多个Channel。当你的应用有许多连接,但单个channel流量很少时很有用。例如,一个聊天工具。

下图表示的是一个selector管理三个channel:

把selector注册channel中。当你调用Selector的 select()方法时,方法会阻塞,直到所有注册了的channel中有一个事件触发了才会返回。一旦方法返回,线程就可以继续处理这些事件。例如,连接成功的事件、接收到数据的事件等。

 

下一篇:【译】Java NIO Channel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值