Java NIO概述

本文章翻译自国外文献,作者水平有限,推荐阅读原文,原文见:http://tutorials.jenkov.com/java-nio/overview.html

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

1. Channels

2. Buffers

3. Selectors

组成Java NIO的类和文件远远不止上边三个,但是我认为其中Channel,Buffer和Selector是Java NIO API的核心组件,

其他的组件,比如Pipe和FIleLock和三个核心组件并不经常联合使用。因此,在这篇综述中,我将把重点放在这三大组件上。

Channels and Buffers

通常,所有NIO中的IO起始于一个Channel,一个Channel就是一个比特流,能够从中把数据读到一个Buffer中,也可以把数据从Buffer写到一个Channel中。

如图:

                                                       

Java NIO:从Channel中读数据到buffer和从buffer中写数据到Channels

在Java NIO中有几种不同形式的Channel和Buffer,下边是Channel的实现类:

1. FileChannel

2. DatagramChannel

3. SocketChannel

4. ServerSocketChannel

如你所见,这些Channels涵盖了UDP+TCP网络IO和文件IO。

为了文章的简介,还有一些和他们相关的接口我留在其他文章中讲。

下边是Buffer的实现类:

1. ByteBuffer

2. CharBuffer

3. DoubleBuffer

4. FloatBuffer

5. IntBuffer

6. LongBuffer

7. ShortBuffer

这些Buffer涵盖了可以通过IO传输的所有基本数据类型:byte,short,int,long,float,double 和characters。

其实,Java NIO还有一个MappedByteBuffer,它用来处理内存映射文件,在这篇文章中不讲它。

Selectors

一个Selector允许一个线程监控多个Channels,这个就很方便,如果你有多个连接打开但是每个连接数据量很少。例如,在

一个聊天服务器中。

下图是一个线程用一个Selector监听3个Channel。

                                                                     

要使用Selector,你必须向他注册Channels,然后可以调用它的select()方法,这个方法是阻塞的直到一个channel中有事件发生。

一旦方法返回,线程能够处理这些事件,例如有新连接或者有数据到达。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值