关于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的对应关系