分类
输入输出流
根据数据流向的不同,IO分为两大类,一类是输入流,一类是输出流。
输入流:只能从中读取数据,而不能写入数据。输出流:只能向其中写入数据,而不能读取数据。
字符字节流
根据处理的数据单元的不同,可以分为两类,一类是字符流,一类是字节流。字节流和字符流的用法几乎一样,区别在于字符流就是专门用来处理字符的。字符流的本质其实是由于数据编码的不同,字节字符流在处理数据时,查询了相应的编码表。因此,只要是处理纯文本文件,推荐使用字符流,除此之外,如图片、音频等都是用字节流。
节点流和处理流
根据流的角色不同,可以分为节点流和处理流。对已存在的特定IO设备(如网络、磁盘)进行数据读/写的流,成为节点流,也被称为低级流。处理流是对已存在的流进行封装,通过封装后的流来实现数据的读/写,处理流因此也被称为高级流。
//节点流,直接传入的参数是IO设备
FileInputStream fis = new FileInputStream("test.txt");
//处理流,直接传入的参数是流对象
BufferedInputStream bis = new BufferedInputStream(fis);
使用处理流的好处就是,程序并不会直接连接到数据源,而是通过节点流间接地连接上数据源,通过处理流,程序可以使用完全一样的代码处理不同的数据源。
JavaIO流的四大基类
Java根据数据的流向(输入输出)以及处理的数据单元(字符字节),将IO类分为四个大类,分别是InputStream(字节输入),Reader(字符输入),OutputStream(字节输出),Writer(字符输出)。下图是以这四个基类为基础,形成的整个IO框架。