1.9 KiB
NIO
简介
nio库在jdk 1.4时被引入,和传统i/o不同的是,nio性能高且基于block。在nio中,定义了类来持有数据,并以block为单位对数据进行处理。
nio和传统io区别
nio和传统io最大的区别是数据打包和传输的方式。在传统io中,会以stream的形式来处理数据;而在nio中,数据则是以block的形式被处理。
面向stream的io系统在同一时刻只能处理1字节的数据,通常较慢。
面向block的io系统则是以block为单位处理数据,处理速度较传统io快。
Channel/Buffer
channel和buffer是nio中的核心对象,几乎在每个io操作中被使用。
channel类似于传统io中的stream,所有数据的写入或读取都需要通过channel。而buffer本质上则是数据的容器,所有被发送到channel中的数据都要先被放置到buffer中,所有从channel中读取的数据都要先被读取到buffer中。
Buffer
Buffer是一个类,用于存储数据,buffer中的数据要么将要被写入到Channel中,要么刚从Channel中读取出来。
Buffer是nio和传统io的重要区别,在传统io中,数据直接从stream中被读取出来,也被直接写入到stream中。
在nio中,数据的读取和写入都需要经过Buffer
buffer的本质是一个字节数组,buffer提供了对数据的结构化访问,并且,buffer还追踪了系统的读/写操作。
Buffer类型
最常用的Buffer类型是ByteBuffer,其支持对底层的字节数据进行set/get操作,初次之外,Buffer还有其他类型。
- ByteBuffer
- CharBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
上述的每个Buffer类都实现了Buffer接口,除了ByteBuffer之外,其他每个Buffer类型都拥有相同的操作。由于ByteBuffer被绝大多数标准io操作锁使用,故而ByteBuffer除了拥有上述操作外,还拥有一些额外的操作。