Files
rikako-note/java se/nio.md
2024-08-24 21:51:54 +08:00

39 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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除了拥有上述操作外还拥有一些额外的操作。