java_nio_1

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. Channels
2. Buffers
3. Selectors
Java 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()函数值做了返回,线程就可以处理这些事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值