本文最后更新于 2025-11-11,文章内容可能已经过时。

节点流(Node Stream)

定义:节点流是直接与数据源(如文件、内存、网络等)相连的流,负责数据的实际读写操作。它是IO操作的基础,也称为"低级流"或"底层流"。

特点

  • 直接与数据源相连,是IO操作的基础
  • 负责数据的实际读写
  • 可以分为多种类型:
    • 文件流:FileInputStream、FileOutputStream
    • 数组流:ByteArrayInputStream、ByteArrayOutputStream
    • 字符串流:StringReader、StringWriter
    • 管道流:PipedInputStream、PipedOutputStream

示例:FileInputStream in = new FileInputStream("test.txt");这个流直接与文件相连,用于读取文件内容。

处理流(Processing Stream / Wrapper Stream)

定义:处理流(也称为"包装流")是"连接"在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能的流。它不直接与数据源相连,而是对节点流进行包装。

特点

  • 不直接与数据源相连,而是包装节点流
  • 使用了修饰器(Decorator)设计模式
  • 主要功能:
    • 性能提高:通过增加缓冲来提高输入输出效率
    • 操作便捷:提供一系列便捷的方法来一次输入输出大批量数据

常见的处理流

  • 缓冲流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
  • 转换流:InputStreamReader、OutputStreamWriter
  • 数据流:DataInputStream、DataOutputStream
  • 对象流:ObjectInputStream、ObjectOutputStream
  • 打印流:PrintStream、PrintWriter

节点流与处理流的区别

特点节点流处理流
与数据源关系直接相连通过包装节点流,不直接相连
作用提供基本的读写功能提供额外功能(缓冲、转换等)
设计模式修饰器设计模式
举例FileInputStream、FileOutputStreamBufferedInputStream、BufferedReader

举个简单例子

// 节点流:直接与文件相连
FileInputStream fileIn = new FileInputStream("test.txt");

// 处理流:包装节点流,增加缓冲功能
BufferedInputStream bufferedIn = new BufferedInputStream(fileIn);

// 通过处理流读取数据
int data = bufferedIn.read();

在这个例子中,FileInputStream是节点流,直接与文件相连;BufferedInputStream是处理流,包装了节点流,为读取操作添加了缓冲功能。

总结

  • 节点流:直接与数据源相连,提供数据读写的基本功能
  • 处理流:在节点流基础上提供额外功能,通过包装节点流实现,不直接与数据源相连

在Java I/O操作中,通常会将节点流与处理流组合使用,先创建节点流,再用处理流包装它,以获得更好的性能和更便捷的操作方式。