Java NIO -基础认知

来源:互联网 发布:台风莫兰蒂数据 编辑:程序博客网 时间:2024/05/22 06:19

Java NIO (New IO) is an alternative IO API for Java (from Java 1.4), meaning alternative to the standard Java IO and Java Networking API’s. Java NIO offers a different way of working with IO than the standard IO API’s.

如上所见,在Java1.4之后出现了NIO代替了IO,不过JavaNIO与IO是两种不同的工作方式哦,所以还是看看吧。

一、组成部分

组成:
1. Channel
2. Buffer
3. Selector
4. Pipe
5. FileLock

前三个是核心组件,这些构成了核心的API,剩余的组件不过是其他三个组件工具类。

二、Channel(通道)

所有的IO在NIO中都是从Channel开始的。

Channel有点像流,数据可以从Channel读到Buffer,也可以从Buffer写到Channel。

java NIO的通道类似于流,但又与流不同:
1.)通道即可以读取数据,也可以写入数据,但流的读写通常是分开的。
2.)通道可以异步的读写。
3.)通道中的数据总是先读到一个Buffer,或者从一个Buffer中写入。

Channel的实现:
1. FileChannel:从文件中读写数据。
2. DatagramChannel:通过UDP读写网络中的数据
3. DatagramChannel:可以监听新进来的TCP连接,像Web服务器那样。
4. SocketChannel:通过TCP读写网络中的数据
这些通道涵盖了UDP、TCP网络IO和文件IO,还有一些其他的接口。

三、Buffer(缓冲)

JAVA NIO中的Buffer用于和NIO通道进行交互,数据从通道读入缓存区,从缓存区写入通道。
缓冲区本质上是一块可以写入数据,也可以读出数据的内存,这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的调用该块内存。

Buffer的实现:
1. ByteBuffer
2. CharBuffer
3. DoubleBuffer
4. FloatBuffer
5. IntBuffer
6. LongBuffer
7. ShortBuffer
8. MappedByteBuffer

这些Buffer涵盖了你能通过IO所能传送的所有数据类型:short、int、long、byte、char、float、double,还有一个MappedByteBuffer,这个是用于表示内存映射文件。

四、Selector(选择)

是指数据从一个Channel读取到多个Buffer中。

Selector允许单线程处理多个Channel。
要使用Selector,必须向Selector注册Channel,然后调用它的select()方法!
这个方法会一直阻塞到某个注册的通道有事件就绪,线程可以处理这些事,如数据连接,数据接收等。

原创粉丝点击