Java中,按照流的流向分,可以分为输⼊流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的⻆⾊划分为节点流和处理流。

    Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,⽽且彼此之间存在⾮常紧密的联系, Java IO流的 40 多个类都是从如下 4 个抽象类基类中派⽣出来的。
    InputStream/Reader: 所有的输⼊流的基类,前者是字节输⼊流,后者是字符输⼊流。
    OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

    按操作方式分类:
    image.png
    按操作对象分类:
    image.png
    关于字符流和字节流:
    字符流是由 Java 虚拟机将字节转换得到的,问题就出在这个过程还算是⾮常耗时,并且,如果我们不知道编码类型就很容易出现乱码问题。所以, I/O 流就⼲脆提供了⼀个直接操作字符的接⼝,⽅便我们平时对字符进⾏流操作。如果⾳频⽂件、图⽚等媒体⽂件⽤字节流⽐较好,如果涉及到字符的话使⽤字符流⽐较好。