www.zhblog.net

Java NIO 中核心概念

Java NIO由以下核心组件组成:

Channels

Buffers

Selectors


Java NIO本身有很多的类和组件,但是我认为Channel,Buffer和Selector构成了API的核心。其余的组件(例如Pipe和FileLock)仅是实用程序类,可以与这三个核心组件结合使用。因此,重点介绍这三个组件。


1.Channels 和 Buffers

Channel 有点像流。可以从Channel中将数据读到Buffer,也可以将数据从Buffer写到Channel:

overview-channels-buffers.png


有几种Channel和Buffer类型,这是Java NIO中主要实现了Channel的列表:

FileChannel

DatagramChannel

SocketChannel

ServerSocketChannel


这些通道涵盖UDP + TCP网络IO和文件IO。


这是Java NIO中的核心Buffer的实现列表:

ByteBuffer

CharBuffer

DoubleBuffer

FloatBuffer

IntBuffer

LongBuffer

ShortBuffer


可以很明显的看到,这些Buffer涵盖了可以通过IO发送的基本数据类型。


Java NIO还具有MappedByteBuffer,它与内存映射文件结合使用。


2.Selectors

Selectors允许单个线程处理多个Channel。如果你的应用程序打开了许多连接(通道),但每个连接的流量很少,这将很方便。例如,在聊天服务中。

这是使用Selectors处理3个Channel线程的图示:

overview-selectors.png


要使用Selectors,你应该用它注册一个Channel,然后调用它的select()方法。该方法将一直阻塞,直到一个已注册的Channel返回ready事件。方法返回后,线程即可处理这些事件。事件可以是建立连接,接收到的数据等。


 

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情