java_nio_1

来源:互联网 发布:鬼畜 知乎 编辑:程序博客网 时间:2024/05/22 16:46

Java NIO 教程


Channels and Buffers

在基本的IO API中,通常处理的是字节流和字符流。在NIO中,处理的是Channels和buffers,数据通常是从channel中读取到buffer中,或者是将buffer写入到channel中去


Non-blocking IO

Java NIO允许你做非阻塞的IO操作。举个例子来说,一个线程可以向channel申请读取数据到buffer中,当channel读取数据到buffer中的时候,线程仍然可以做别的事情。一旦数据读取到了buffer中,线程马上继续处理,对于将数据写入到channel中也是相同的道理


Selectors

Java NIO包含一个"selectors"的概念,一个selector是一个对象,selector可以监控多个channels事件(比如连接的打开,数据的到达)。因此一个线程就可以监听多个channels


Java NIO 概述


Java NIO包含的几个主要的组件:

1. Channels2. Buffers3. SelectorsJava NIO不光有上述3个组件,但是Channel, Buffer和Selector是Java NIO的核心。其他的一些工具类,都是基于上述三者的组合。


Channels和Buffers

通常,所有在NIO的IO都从一个Channel开始,一个Channel是一个bit类似于一个Stream。从Channel数据可以读到一个buffer中去,数据当然也可以通过Buffer的形式写入到Channel中去。Channels read data into Buffers, and Buffers write data into Channels

下面有一些Channel和Buffer的类型。如下列出了主要的Channel接口

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你所看到的,channels涉及到了UDP,TCP,IO还有文件IO
还有一些接口伴随上述的

下面是一些关于Buffer的实现:

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

这些Buffer涉及到了基本的Java数据类型:byte, short, int, long, float, double和characters

Selectors

Selector允许一个线程去处理多个Channel。这有易于你的程序有很多的连接(Channels)

为了使用Selector你应该将要使用的Channel注册到Selector上面。然后调用Select()方法。这个方法将阻塞直到有一个事件能处理注册的channel。一旦这个select()函数值做了返回,线程就可以处理这些事件

0 0
原创粉丝点击