先来点预备小知识:

流分为字节流、字符流(数据类型);输入流、输出流(数据方向);节点流、处理流(数据功能);这三种分类时根据不同的概念来划分的;流有四个抽象类:InputStream 、OutputStream、Reader、Writer;其中前两个是字节流处理时候是通过输入或输出字节形式的;后面两个是通过字符来处理的读取或写入每个字符;在java中输入输出写入读取是从程序的方向上去辨别的,这一点不要搞混了;那么什么是节点流呢?我给大家举个简单的例子:比如说我们从某个文件中读取数据我们把这个文件当做一个大桶,我们现在用个管道直接连接在这个大桶上进行抽水此时这跟管道就是节点流;当我们感觉这个管道不够我们抽水用的了,我们在其外面套上一个大的抽水管道,此时这个大的管道就相当于处理流;

节点流和处理流 :

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据,如FileReader 。
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

节点流:
文件流:FileInputStream ,FileOutputStrean ,FileReader ,FileWriter 文件进行处理的节点流。
父 类 :InputStream ,OutputStream ,Reader, Writer。
字节数组流: ByteArrayInputStream ,ByteArrayOutputStream。
对数组进行处理的节点流,对应的不再是文件,而是内存中的一个数组。

常用处理流:
缓冲流:BufferedInputStrean ,BufferedOutputStream, BufferedReader ,BufferedWriter。
(增加缓冲功能,避免频繁读写硬盘,提高性能)
转换流:InputStreamReader OutputStreamReader。
(将字节流转换为字符流)
数据流: DataInputStream ,DataOutputStream
(提供将基础数据类型写入到文件中,或者读取出来)

注意:

(1)只要遇到了节点流,我们都要加上缓冲流,内部会提高他的性能。
(2)可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。