Stream
包括字符流(Reader, Writer),字节流(InputStream, OutputStream).
前者的操作经过缓冲区再操作文件, 后者直接操作文件。
BIO
同步阻塞IO, NIO出现之前主要使用BIO以及新建线程的方式解决并发请求。
下面是BIO的经典编程模型
while循环不断调用accpet, 阻塞式的获取建立的连接,当方法返回时,创建新线程对socket进行处理。
适用于连接的数量不大时,比如单机1000以下。
NIO
Java NIO的三个核心组件:Channel, Buffer, Selector,底层模型是IO多路复用模型(Reactor模型)。
Channel包括 FileChannel, DatagramChannel, SocketChannel, SocketServerChannel
对应文件IO、UDP和TCP(Server和Client)
数据从buffer写入channel, 或从channel读入buffer。MappedByteBuffer采用内存映射文件的方式处理输入输出, 把文件的一段区域映射到虚拟内存中,可以像访问内存一样访问文件适合处理大文件。
Selector监听多个channel的事件,实现IO的多路复用。在linux系统下调用的是epoll/select
AIO
异步非阻塞的IO,方法调用后立刻返回,由操作系统来执行某个操作,在操作完成状态改变时通知对应的线程,进行处理。