一/
IO: 单向 面向流 阻塞
NIO:双向 面向缓冲区(块IO) 非阻塞
通道(Channel)/缓冲区(Buffer)
二/
读取:目标文件->缓冲区
写入:缓冲区->目标文件
三/
缓冲区状态变量:
position
limit
capacity
四/缓冲区的使用:一个内部循环
下面的内部循环概括了使用缓冲区将数据从输入通道拷贝到输出通道的过程。
1
2
3
4
5
6
7
8
9
10
11
|
while (true) {
buffer.clear();
int r = fcin.read( buffer );
if (r==-1) {
break;
}
buffer.flip();
fcout.write( buffer );
}
|
read()
和 write()
调用得到了极大的简化,因为许多工作细节都由缓冲区完成了。 clear()
和 flip()
方法用于让缓冲区在读和写之间切换。
五/缓冲区的分配,包装,分片和数据共享
六/只读缓冲区,直接和间接缓冲区,内存映射文件IO...
七/分散读取和聚集写入
八/异步I/O和连网
Selector
注册各种 I/O 事件
1. 创建selector
2. 创建ServerSocketChannel(套接字通道),绑定给定的端口
3. 将新打开的
ServerSocketChannels
注册到 Selector,
SelectionKey
代表通道在此 Selector
上的注册
4. 迭代
SelectionKeys并依次处理每个
SelectionKey
对应事件
九/字符集编码和解码