流相当于一条管道,用来传输数据;用形象的思维来分析流这个概念,(水管、水滴、小桶)
在流中我们以当前的程序运行所在的内存角度来划分输入/输出;
按照流中传输的数据单元可以分为字节流、字符流;字节流可以认为水管中每一滴水就是一个字节,而在字符流中每一滴水是一个字符(两个字节);
如果按照流的角色分,可以分为(底层)节点流、(上层)处理流;
怎么去理解节点流,个人认为它就是一根管道直接与数据源连接,而处理流则是在已存在的流上进行封装(即在流上再包装其它流);当然我们也有另外一种更好的方法来区分它们:只要流的构造参数不是一个物理节点,而是已存在的流,那么这种流一定是处理流,所有节点流都是直接以物理IO节点作为构造参数的;
当然我们在实际应用的过程中,如果输入\输出的内容是文本内容,那么我们应该使用字符流,如果内容是二进制内容则要用字节流;原因是什么呢?当我们在用字节流处理文本文件时,我们而要用合适的方式转换成字符,这就增加了编程的复杂度。当然字节流其实比字符流更加的强大,因为计算机中的所有数据都二进制的,它能够处理所有的二进制文件
字节流--------------继承体系图
字符流------------继承体系图
在流中我们以当前的程序运行所在的内存角度来划分输入/输出;
按照流中传输的数据单元可以分为字节流、字符流;字节流可以认为水管中每一滴水就是一个字节,而在字符流中每一滴水是一个字符(两个字节);
如果按照流的角色分,可以分为(底层)节点流、(上层)处理流;
怎么去理解节点流,个人认为它就是一根管道直接与数据源连接,而处理流则是在已存在的流上进行封装(即在流上再包装其它流);当然我们也有另外一种更好的方法来区分它们:只要流的构造参数不是一个物理节点,而是已存在的流,那么这种流一定是处理流,所有节点流都是直接以物理IO节点作为构造参数的;
当然我们在实际应用的过程中,如果输入\输出的内容是文本内容,那么我们应该使用字符流,如果内容是二进制内容则要用字节流;原因是什么呢?当我们在用字节流处理文本文件时,我们而要用合适的方式转换成字符,这就增加了编程的复杂度。当然字节流其实比字符流更加的强大,因为计算机中的所有数据都二进制的,它能够处理所有的二进制文件
字节流--------------继承体系图
字符流------------继承体系图
输入/输出流体系
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | File… | File Reader | File Writer |
访问数组 | ByteArray InputStream | ByteArray… | CharArray Reader | CharArray Writer |
访问管道 | PipedInputStream | Piped… | Piped Reader | Piped Writer |
访问字符串 | String Reader | String Writer | ||
缓冲流 | BufferedInputStream | Buffered… | Buffered Reader | Buffered Writer |
转换流 | InputStreamReader | OutputStreamReader | ||
对象流 | ObjectInputStream | Object… | ||
抽象基类 | FilterInputStream | Filter… | Filter Reader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回流 | PushbackInputStream | Pushback Reader | ||
数据流 | DataInputStream | Data… |