IO流主要可以分为以下几类:

  1. 字节流:这是所有流类的父类,包括InputStream和OutputStream。字节流按字节读取数据,适用于处理二进制数据,如图片、音频、视频等。

    • InputStream类:这是所有字节输入流类的父类,提供了基本的字节输入方法,如read()、read(byte[] b)、read(byte[] b, int off, int len)等。

    • OutputStream类:这是所有字节输出流类的父类,提供了基本的字节输出方法,如write(int c)、write(byte[] b)、write(byte[] b, int off, int len)等。

  2. 字符流:这是所有字符输入流和字符输出流类的父类,包括Reader和Writer。字符流按字符读取和写入数据,适用于处理文本数据。

    • Reader类:这是所有字符输入流类的父类,提供了基本的字符读取方法,如read()、read(char[] c)、read(char[] c, int off, int len)等。

    • Writer类:这是所有字符输出流类的父类,提供了基本的字符写入方法,如write(int c)、write(char[] c)、write(char[] c, int off, int len)等。

  3. 节点流:这是直接从数据源(如文件、网络连接等)读取数据的流,也称为底层流。节点流与特定的数据源直接相关,不能与其他流组合使用。

  4. 处理流:这是从节点流中读取数据,然后对数据进行处理(如过滤、转换等),再写入到另一个节点流的流。处理流位于节点流之上,可以链式组合使用,提供更高级的数据处理功能。

    • 过滤流:这是一种特殊类型的处理流,它允许你在数据传输过程中插入自定义的处理逻辑。例如,BufferedReader和BufferedWriter就是常见的过滤流,它们分别对InputStream和OutputStream进行缓冲,提高读写效率。

此外,根据流的特性和使用场景,还可以进一步细分为:

  • 输入流(Input Stream):用于从数据源读取数据的流。

  • 输出流(Output Stream):用于向数据源写入数据的流。

  • 字节流:以字节为单位处理数据的流。

  • 字符流:以字符为单位处理数据的流。

  • 节点流:直接连接到数据源的流。

  • 处理流:对数据进行处理后再输出的流。

在实际应用中,通常会根据具体需求选择合适的IO流类型。例如,处理文本文件时可能会使用BufferedReader和FileReader的组合;而处理图像文件时可能会使用BufferedImage和ImageIO的组合。