代码改变世界

关于io的总结

2022-06-29 10:25  没有波澜的天空  阅读(46)  评论(0编辑  收藏  举报

一、io模型

同步阻塞模型:

 

 

同步非阻塞模型:

 

 

异步非阻塞模型:

 

 

异步阻塞IO:

二、直接io(操作系统io)(以linux io为例)

      linux io分为同步io,异步io

      其中同步io分为同步阻塞io、同步非阻塞io、io多路复用(也是同步阻塞的)

      其中io多路复用当前用户最广

     io多路复用有三种实现方式,分别是select、poll、epoll

三、缓冲io(以java io为例)

BIO(Blocking IO)是同步阻塞式的IO模型,面向流操作,保证顺序,如JDK1.4之前的传统IO操作。

NIO(New IO)是同步非阻塞式的IO模型,面向缓冲区,提供Channel,Buffer,Selector等抽象,如JDK1.4引入的IO操作。

AIO(Asynchronous IO)是异步非阻塞式的IO模型,如JDK1.7引入的IO操作。

java io(bio)读取文件实例:

try {
String path = "D:\\iotest.txt";
File file = new File(path);
FileInputStream in = new FileInputStream(file);
Reader reader2 = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(reader2);
String line;
while((line=bufferedReader.readLine())!=null){
System.out.println(line);
}
bufferedReader.close();
} catch (Exception e) {
}

java io(nio)读取文件实例:

 try {

    FileInputStream fis = new FileInputStream("1.jpg");
FileChannel fisChannel = fis.getChannel();
// 分配指定大小的缓冲区
ByteBuffer buf = ByteBuffer.allocateDirect(1024);
// 将通道中的数据存取缓冲区
while (fisChannel.read(buf) != -1) {
// 读取信息
buf.flip();
buf.clear();
}
} catch (Exception e) {
e.printStackTrace();
}

java io(aio)读取文件实例:(aio的类库也包含在java.nio中)

四、java io 和linux io的对应关系