1.1流概念
流是字节或字符数据的数据源或目的,用以隐藏数据传输细节,可以从流读取数据或将数据写到流,Java程序不能直接操纵I/O设备,而是在程序和设备之间加入了一个中间介质
1.2流的分类
- 流可以分为BIO、NIO和AIO三大类。
- BIO即同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成
- NIO即同步非阻塞,一个线程不断的轮询每个输入输出的状态改变,如果有状态发生了改变,则进行下一步的 操作
- AIO即异步非阻塞I/O模型,无需一个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知 对应的线程来处理。
1.21按流向分为输入流和输出流,可以从输入流读取数据但不能写,要从输入流读取数据,则必须有一个与这个 流相关的字符源
1.22按传输单位分为字节流和字符流
- Java具备平台无关性,这里的字节是指8位,字符是16位
- 字节流从InputStream/OutputStream派生出来,以字节为基本处理单位,一般用于操作二进制数据, 字节次序是有意义的
- 字符流从Reader/Writer派生出来的,以16位的Unicode码表示字符为基本处理单位,一般用于操作字符 数据
- 使用桥接流可以实现两个流之间的转换
1.23按功能还可以分为节点流和过滤流
- 节点流:负责数据源和程序之间建立连接,结点流对特定的地方读写
- 过滤流:用于给节点增加功能,过滤流使用结点流进行输入/输出并添加附加功能
注意:I/O流是一类很宝贵的资源,使用完后必须调用close()方法关闭流并释放资源。在关闭流时只用关闭外层 的流
-
字符流的两个顶层父类:Reader和Writer
-
字节流的两个顶层父类:InputStream和OutputStream
-
输入输出靠reader和writer, inputstream和outputstream四个类和子类支持
-
读入的内容有对象,字符,图像和声音等