最近开始接触NIO,所以以系列的博客来记录自己的学习过程。 Java NIO(New IO): 它是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 它有下面这几个主要的模块组成: - 通道(Channels)
- 缓冲(Buffers)
- 选择器(Selectors)
①Java NIO:Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 基本上,所有的IO在NIO中都从一个Channel开始.Channel有点像流。数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。 Java NIO中Channel的主要实现: - FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
上面的这些实现类涵盖了UDP和TCP的网络IO,以及文件IO
Java NIO中Buffer的主要实现: - ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。
②Java NIO:Non-Blocking IO (非阻塞IO)Java NIO可以让你非阻塞地使用IO。例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情
③Java NIO:Selector(选择器)Java NIO引入了选择器的概念,选择器用于监听多个通道的时间,(例如:连接打开,数据到达).因此,单个的线程可以监听多个数据通道。 Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。

要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。
|