新增nio阅读笔记

This commit is contained in:
asahi
2024-08-24 21:51:54 +08:00
parent 093eb9e9b2
commit 19ce2bfe4f

38
java se/nio.md Normal file
View 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除了拥有上述操作外还拥有一些额外的操作。