Java:NIO

NIO(即New IO)概念

 

JDK1.4版本开始,JDK提供了新的IO操作API, NIO提供多路(non-blocking) 非阻塞式的高伸缩性网络I/O,从而提高了效率,NIO主要有三大核心组件:Channel、Buffer和Selector,这里重点学习前两个, Selector 将在网络编程章节详细介绍。

 

Buffer

 

Buffer是一个抽象类,Buffer类型变量对应的对象代表一块缓冲区,ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer和ShortBuffer类都是Buffer抽象类的子类,其中ByteBuffer最常用。

 

ByteBuffer常用方法:

 

1.static ByteBuffer allocate(int capacity):分配一个新的字节缓冲区。√

2.int capacity() :返回此缓冲区的容量。

3.ByteBuffer put(byte b):将字节类型数据写入当前位置的缓冲区,然后当前位置+1,位置从0开始。

4.byte[] array() :将ByteBuffer类型的数据转为byte数组。√

5.int position():返回缓冲区当前位置。

6.Buffer flip() ):翻转缓冲区,将position置零。√

7.boolean hasRemaining():判断缓冲区是否含有数据 。

8.byte get()读取缓冲区当前位置的字节,然后当前位置+1。√

9.Buffer clear():清除缓冲区,位置归零。√

 

Java:NIO_第1张图片

 

Channel

 

Channel是一个接口,该接口类型变量指向的对象代表一个数据传输通道,Channel对象是面向缓冲区的:数据总是从通道读取到缓冲区(Buffer类型对象),或从缓冲区(Buffer类型对象)写入到通道中。

 

Channel接口主要实现类如下:

1.FileChannel:从文件中读写数据。

2.DatagramChannel:通过UDP读写网络中的数据。

3.SocketChannel:通过TCP读写网络中的数据。

4.ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样,对每一个新进来的连接都会创建一个SocketChannel。

 

FileChannel

 

可以通过调用FileInputStreamFileOutputStream类中getChannel方法获取FileChannel对象,FileChannel类常用方法如下:

 

1.int read(ByteBuffer dst):从通道的当前文件位置开始将数据读取到缓冲区,然后以实际读取的字节数更新文件位置;返回实际读取的字节数,如果已达到通道末尾, 则返回-1

 

2.void close():关闭通道。

 

Java:NIO_第2张图片

 

Java:NIO_第3张图片

 

 

3.int write(ByteBuffer src):从通道的当前文件位置开始将缓冲区中数据写入通道,然后文件位置用实际写入的字节数更新。

 

Java:NIO_第4张图片

 

Java:NIO_第5张图片

 

 

 

 

 

 

 

你可能感兴趣的:(Java,编程知识,Java基础)