Java的NIO包括以下核心组件:
- 通道
- 缓冲器
- 选择器
Java的NIO拥有不止这些类和组件,但通道
,缓冲区
和选择器
构成API的核心,在我看来。部件,象其余 管道
和的FileLock
都与三个核心组件一起使用仅仅工具类。因此,我将专注于这三个组件在这个NIO概述。其他组件在自己的文字在本教程中介绍其他地方。看到菜单在这个页面的右上角。
通道和缓冲区
通常情况下,所有的IO在NIO开始于一个通道
。一个渠道
是有点像流。从频道
数据可被读入一个缓冲区
。数据也可以从一个写入缓冲
成一个信道
。这里是一个一个例证:
有几个渠道
和缓冲区
类型。这里是主列表频道
中的Java NIO实现:
- FileChannel
- DatagramChannel
- 的SocketChannel
- 的ServerSocketChannel
正如你所看到的,这些渠道包括UDP + TCP网络IO和文件IO。
还有伴随这些类过一些有趣的接口,但我会继续出来这个Java NIO概述为简单起见。他们会解释有关的地方,在此Java NIO教程的其他文本。
这里是核心的列表缓冲器
中的Java NIO实现:
- 的ByteBuffer
- 为CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
这些缓冲区
的封面,你可以通过发送IO基本数据类型:字节,短,廉政,长,浮动,双和字符。
的Java NIO还具有MappedByteBuffer
其一起使用存储器映射的文件。我要离开这个缓冲
了本概述虽然。
选择器
一个选择
允许单个线程来处理多个通道
的。这是方便的,如果你的应用程序有许多连接(通道)开放,但只有每个连接上的低流量。例如,在聊天服务器。
下面是一个使用一个线程的说明选择
处理3 通道
的:
要使用选择
您注册通道
与它的。然后调用它 的select()
方法。这种方法将阻塞,直到有准备注册信道之一的事件。一旦该方法返回,线程然后可处理这些事件。事件的例子传入的连接,接收到的数据等。