Java Nio 二、Java NIO综述

来源:互联网 发布:excel2003电脑版软件 编辑:程序博客网 时间:2024/06/14 17:31

最后更新时间:2014-06-23

Java NIO包含以下几个核心的组件:

  • 通道
  • 缓冲区
  • 选择器

Java NIO除了那些有更多的类和组件,然而在我看来,通道,缓冲区,选择器组成了这个API的核心。其余的组件,像Pipe和FileLock仅仅是作为一个工具类与那三个核心的组件共同被使用。其他的组件在这个教程的其他章节被解释。看这个页面顶层角落的菜单。

通道和缓冲区

典型的,在NIO中的所有IO都是以一个Channel开始。一个Channel是一个比特像一个流。来自Channel中的数据可以读进一个Buffer。数据也可以从一个Buffer写进一个Channel。这个有一个那个的图解。

这儿有几个Channel和Buffer的类型。这儿有一个在Java NIO中主要的Channel实现的列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你看到的,这些channels覆盖了UDP和TCP的网络IO,还有文件IO。

这儿也有一些伴随着这些类的一些有趣的接口,但是因为简单的缘由我在这个Java NIO综述里面不介绍他们了。他们将会在Java NIO教程中的其他章节里面有相关的介绍。

这里有一个在Java NIO中核心Buffer的实现:

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

这些Buffer覆盖了你可以通过io发送数据的基本数据类型:byte,short,int,float,double以及字符类型的。

Java NIO中也有一个MappedByteBuffer,这个是通过和内存映射文件结合使用的。但是在这个综述中也不加这个Buffer的介绍。

Selectors(选择器)

一个Selector允许一个单独的线程去处理多个Channel。如果你的应用程序有很多打开的连接(Channels),但是在每一个连接中有很低的传输。例如,在一个聊天服务器中。

这儿有一个使用一个selector的一个线程处理3个Channel的一个图解:

去使用一个selector,你用它注册一个Channel。然后调用它的select()方法。这个方法将会堵塞,直到这里注册中的channels中有一个准备好的事件。一旦这个方法返回,这个线程将会执行这些事件。事件的实例是进来的连接,接收到的数据等等。


翻译地址:http://tutorials.jenkov.com/java-nio/index.html

下一章:Java Nio 三、Java NIO Channel

0 0
原创粉丝点击