java流的分类:
1,按照流向分:
怎么区分输入流和输出流呢,输入输出流是相对于计算机内存来说的,为不是相对于源和目标,比如说通过java去读取一个文件里面的内容就是需要把文件的内容通过流读取到内存中,
对于内存来说,是输入,所以叫输入流,反之亦然。
2,按照处理数据单元划分:
字节流是8位通用字节流,也就是一个buye,字符流是16位的Unicode字符流。
3,按照功能分类:
节点流:可以直接从数据源或者目的地读取数据。
处理流(包装流):不直接连接到数据源或者目的地,对其他流进行封装。目的是简化操作和提高性能。这里也设计到设计模式中的装饰器模式。
转换流:将字节流转换称字符流,通常用来指定字符以什么样的编码格式读取和以什么样的编码格式写入。
最后再附上java关于io主要类的关系图:
下面来总结一下各种流的使用场景;
文本操作: FileReader, FileWriter,BufferedReader(缓冲流),BufferedWriter(缓冲流)
字符操作: FileInputStream, FileOutputStream,BufferedInputStream(缓冲流),BufferedOutputStream(缓冲流),InputStreamReader(转换流,字节转字符),OutputStreamWriter(转换流,字符转字节)
基本数据类型操作:DataInputStream, DataOutputStream
操作对象(序列化和反序列化): ObjectInputStream ,ObjectOutputStream
具体每种流怎么操作这里就不一一描述了,这个需要自己多去练习。本身io流的api就比较简单,最重要的还是需要知道什么情况下用什么流。