流的分类

流的分类


在Java中,流(Stream)被用于表示数据的输入和输出。Java的流分为几个不同的类别,每种类别都有其特定的用途和特点。以下是Java流的主要分类:

1. 字节流(Byte Streams)

  • 处理原始字节数据。
  • 代表类:InputStreamOutputStream

2. 字符流(Character Streams)

  • 处理字符数据,自动处理字符编码的转换。
  • 代表类:ReaderWriter

3. 输入流(Input Streams)

  • 用于从数据源读取数据。
  • 字节输入流:FileInputStream, ByteArrayInputStream, StringBufferInputStream
  • 字符输入流:FileReader, CharArrayReader, StringReader

4. 输出流(Output Streams)

  • 用于向数据目标写入数据。
  • 字节输出流:FileOutputStream, ByteArrayOutputStream, PrintStream
  • 字符输出流:FileWriter, CharArrayWriter, StringWriter

5. 节点流(Low-Level Streams)

  • 直接连接到数据源或数据目的地的基本流。
  • 例如:FileInputStream, FileOutputStream, FileReader, FileWriter

6. 处理流(High-Level Streams)

  • 在节点流的基础上提供额外的功能,如缓冲、过滤、数据转换等。
  • 字节处理流:BufferedInputStream, BufferedOutputStream, DataInputStream, FilterInputStream
  • 字符处理流:BufferedReader, BufferedWriter, LineNumberReader, FilterReader

7. 管道流(Pipe Streams)

  • 用于线程之间的通信。
  • 代表类:PipedInputStreamPipedOutputStream

8. 数据流(Data Streams)

  • 用于读写原始数据类型,自动转换为字节。
  • 代表类:DataInputStream(从字节流中读取基本数据类型)和 DataOutputStream(向字节流中写入基本数据类型)。

9. 对象流(Object Streams)

  • 用于对象的序列化和反序列化。
  • 代表类:ObjectInputStreamObjectOutputStream

10. 文件通道(File Channels)

  • Java NIO 中的文件通道,提供对文件的高效访问。
  • 代表类:FileChannel

11. 内存映射文件(Memory-Mapped Files)

  • 一种内存访问方式,允许将文件区域映射到内存中。
  • 通过 FileChannel 实现。

12. 散射/聚集通道(Scattering/Gathering Channels)

  • 散射通道允许从多个缓冲区读取数据并写入单一的目标通道。
  • 聚集通道允许从单一的源通道读取数据并写入多个目标缓冲区。

示例用法

以下是使用字节输入流和字节输出流的示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class StreamCopyExample {
    public static void main(String[] args) {
        String fromFile = "source.txt";
        String toFile = "destination.txt";

        try (FileInputStream in = new FileInputStream(fromFile);
             FileOutputStream out = new FileOutputStream(toFile)) {
            int byteRead;
            while ((byteRead = in.read()) != -1) {
                out.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例中,我们从一个文件读取数据并写入到另一个文件,展示了字节流的基本用法。

posted @ 2024-08-06 10:29  墨澜  阅读(21)  评论(0编辑  收藏  举报