1. 概述
IO
计算机系统的IO即通过数据流、序列化和文件系统提供系统输入和输出。
流
流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或者是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
Java把这些不同来源和目标的数据都统一抽象为数据流。
分类
按流向分:
1)输入流:程序可以从中读取数据的流;
2)输出流:程序能向其中写入数据的流
按数据传输单位分:
1)字节流:以字节为单位传输数据的流;
2)字符流:以字符为单位传输数据的流;
按功能分:
1)节点流:用于直接操作目标设备的流;
2)过滤流:是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。
2. Linux同步IO
2.1 阻塞IO
在阻塞式IO模式下,当系统调用read
后,如果此时内存数据未准备好,用户线程会被阻塞,等数据准备好,并从内核缓存区将数据拷贝至用户空间后,read
指令才会返回。