新增nio阅读笔记
This commit is contained in:
38
java se/nio.md
Normal file
38
java se/nio.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# 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除了拥有上述操作外,还拥有一些额外的操作。
|
||||||
|
|
||||||
Reference in New Issue
Block a user