4.0、Java_IO流 - 流的概念细分
按照流的方向分类:
输入流:数据流从数据源到程序(以 InputStream 、Reader 结尾的流);
输出流:数据流从程序到目的地(以 OutputStream 、Writer 结尾的流);
按处理的数据单元分类:
字节流:一字节为单位获取数据,命名上以 Stream 结尾的流一般是字节流,如FileInputStream 、FileOutputStream;
字符流:以字符为单位获取数据,命名上以 Reader / Writer 结尾的流一般是字符流,如 FileReader 、FileWriter;
那如何判断 - 什么时候用字节流什么时候用字符流呢?
假设我们现在需要读取一个外部二进制文件(比如:图片、音影等),那么由于文件本身就是一个二进制的文件,理所应当使用 字节流 读取文件内容;
假设我们读取的文件里放的是一些文本性的内容,我们要将该文件基于文本内容的形式读取进来,那么就需要用到字符流了;
按照处理对象不同分类:
节点流:可以直接从 数据源 ( 源设备 / 目标设备 ) 读写数据,如 FileInputStream 、FileReader 、DataInputStream 等 [ 这里稍作解释:我们可以将流想象成管道,Java-IO流为我们提供了很多不同类型的管道,管道与管道之间也是可以嵌套的,但是不管你如何嵌套 -> 最后也必须有一个管道是直接连接着 数据源 的,那么可以直接连接 数据源 的管道就被称为 - 节点流 ];
处理流(包装流):不直接连接 数据源 的管道是 " 处理流 ";通过对其他流的处理提高程序的性能,如 BufferedInputStream 、BufferedReader 等;
如下图所示 ->
节点流 处于 IO 操作的第一线,所有操作必须通过他们进行(这是当然,因为他们肯定连接着数据源);处理流(包装流)可以对节点流进行包装,提高性能或提高程序的灵活性;