问答题660/1053什么是节点流,什么是处理流,它们各有什么用处,处理流的创建有什么特征?

难度:
2021-11-02 创建

参考答案:

节点流和处理流

在 Java 中,I/O 流被分为两种类型:节点流Terminal Stream)和 处理流Filter Stream)。这两种流在 Java 的 I/O 系统中各有不同的角色和用途。


节点流(Terminal Stream)

节点流(也称为 基础流)是直接操作数据源或数据目标的流。它们负责从实际的 I/O 设备(如文件、控制台、网络连接等)读取数据,或者将数据写入到这些设备。节点流提供了基本的 I/O 操作,如读取、写入和关闭。

1. 特点

  • 节点流与具体的数据源或数据目标直接交互。
  • 直接读取或写入数据,操作的是底层 I/O 设备。
  • 节点流是数据的实际传输者,不涉及任何转换或过滤。
  • 主要用于实际的数据输入输出,常用于文件、网络或其他外部设备的读取和写入。

2. 常见的节点流类

  • InputStreamOutputStream:用于字节数据的输入和输出。
    • FileInputStreamFileOutputStream
    • BufferedInputStreamBufferedOutputStream
    • ObjectInputStreamObjectOutputStream
  • ReaderWriter:用于字符数据的输入和输出。
    • FileReaderFileWriter
    • BufferedReaderBufferedWriter
    • PrintWriter

3. 用途

  • 节点流通常用于实际的 I/O 操作,直接与磁盘、网络或其他 I/O 设备交互。例如,读取文件内容、从网络接收数据、将数据写入文件等。
  • 节点流可以从磁盘读取字节或字符数据,也可以将数据写入文件、数据库或其他存储设备。

处理流(Filter Stream)

处理流(也叫 包装流)是用来对节点流中的数据进行处理或转换的流。它们不是直接操作数据源或目标,而是通过包装一个现有的节点流(或其他处理流)来增加额外的功能,通常用于转换、缓冲或其他数据处理。

1. 特点

  • 处理流通常用来 包装节点流 或其他处理流,提供一些额外的功能(如缓冲、数据转换、压缩、加密等)。
  • 它们不直接与外部数据源或数据目标交互,而是通过装饰已有的流来增强功能。
  • 处理流常常提供对节点流的 增强功能,如提高性能(通过缓冲)或对数据进行格式转换。

2. 常见的处理流类

  • 字节流的处理流
    • BufferedInputStreamBufferedOutputStream:用于缓冲数据流,增加读取和写入效率。
    • DataInputStreamDataOutputStream:用于读写 Java 基本数据类型。
    • ObjectInputStreamObjectOutputStream:用于对象的序列化与反序列化。
    • GZIPInputStreamGZIPOutputStream:用于压缩和解压缩数据。
  • 字符流的处理流
    • BufferedReaderBufferedWriter:用于缓冲字符数据,提升性能。
    • PrintWriter:用于格式化输出,支持自动刷新。
    • InputStreamReaderOutputStreamWriter:用于字符与字节流之间的转换。

3. 用途

  • 增强流的功能:处理流用于对节点流的功能进行增强,比如:
    • 缓冲流BufferedReaderBufferedWriterBufferedInputStream)提升读取和写入效率。
    • 转换流InputStreamReaderOutputStreamWriter)将字节流与字符流之间进行转换。
    • 数据流DataInputStreamDataOutputStream)用于按固定格式读写基本数据类型。
    • 对象流ObjectInputStreamObjectOutputStream)用于序列化和反序列化 Java 对象。

处理流的创建特征

  1. 处理流是包装或装饰流

    • 处理流通常需要 包装 一个节点流或其他处理流,作为其内部流对象。它通过增强现有流的功能来实现自己的功能。例如,BufferedReader 是包装了 FileReaderObjectOutputStream 是包装了 FileOutputStream
  2. 处理流用于增强或转换数据

    • 处理流并不直接与数据源或目标交互,而是增强数据传输过程中的性能或功能。例如,BufferedReader 可以增强读取字符流的性能,DataInputStream 可以处理基本数据类型的读写。
  3. 可以链式创建

    • 多个处理流可以链式创建,以逐步处理数据。每个处理流在前一个流的基础上进行增强或转换。例如,BufferedReader 可以包装在 InputStreamReader 中,ObjectOutputStream 可以包装在 BufferedOutputStream 中。
  4. 关闭顺序

    • 当多个处理流和节点流一起使用时,流的关闭顺序要从最外层的流开始,逐层向内关闭。在 try-with-resources 语句中,Java 会自动按顺序关闭这些流。

最近更新时间:2024-12-24